qemu-devel
[Top][All Lists]
Advanced

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

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


From: Anthony Liguori
Subject: Re: [Qemu-devel] [PATCH] os-posix: call system_powerdown on SIGTERM, enabling clean guest shutdown
Date: Thu, 03 Nov 2011 10:06:36 -0500
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.21) Gecko/20110831 Lightning/1.0b2 Thunderbird/3.1.13

On 11/03/2011 08:08 AM, Bjørn Mork wrote:
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 don't think this is such a good idea. SIGTERM shouldn't be subject to the guest's interpretations.

Instead of doing a killall qemu, just send a system_powerdown command to each qemu's monitor instance.

Regards,

Anthony Liguori

---
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)




reply via email to

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