qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] os-posix: call system_powerdown on SIGTERM, enablin


From: Bjørn Mork
Subject: [Qemu-devel] [PATCH] os-posix: call system_powerdown on SIGTERM, enabling clean guest shutdown
Date: Thu, 3 Nov 2011 14:08:11 +0100

Allow well behaved guests to shutdown cleanly when we receive SIGTERM,
e.g. when the host reboots.

The host may be powered down or rebooted while guests are running
without any outer supervision scripts.  These guests will be stopped
by the generic host "sendsigs" script, usually by sending SIGTERM to all
processes still running and then SIGKILL if that didn't work.  Let the
guest power down instead of just killing i instantly.

Signed-off-by: Bjørn Mork <address@hidden>
---
I wonder if I miss something obvious here... So this patch should be
considered a RFC.  It certainly fixes a small problem for me:  I often
run a number of guests which are started manually, or by simple "runme"
scripts, without any libvirt wrapper or similar.  If/when the host is
rebooted, these guests will be shut down abrubtly with possible guest
file system corruption and other data loss as a consequence. Powering
down on SIGTERM seems like an obious win-win.

I also wonder if it would be useful to do a reboot on HUP, but that
wouldn't solve any real problem so I'm not including it in this 
patch.



Bjørn

 os-posix.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/os-posix.c b/os-posix.c
index dbf3b24..167fd3b 100644
--- a/os-posix.c
+++ b/os-posix.c
@@ -65,7 +65,10 @@ void os_setup_early_signal_handling(void)
 
 static void termsig_handler(int signal, siginfo_t *info, void *c)
 {
-    qemu_system_killed(info->si_signo, info->si_pid);
+    if (info->si_signo == SIGTERM)
+       qemu_system_powerdown_request();
+    else
+       qemu_system_killed(info->si_signo, info->si_pid);
 }
 
 void os_setup_signal_handling(void)
-- 
1.7.2.5




reply via email to

[Prev in Thread] Current Thread [Next in Thread]