qemu虚拟机的关闭方式主要包括如下几种方式:通过qemu monitor的system_powerdown命令进行关闭,
在libvirt对qemu进行管理的情况下,通过virsh shutdown命令进行关闭。
在虚拟机内使用Guest OS自带的关机按钮进行关闭。
通过qemu monitor的quit命令进行关闭。
在libvirt对qemu进行管理的情况下,通过virsh destroy命令进行关闭。
在主机端通过Ctrl+C强制关闭qemu进程关闭虚拟机。
kill/pkill命令结束进程
1. qemu monitor的system_powerdown命令
system_powerdown是qemu monitor中支持的一个命令。
qemu进程的主循环位于vl.c:main_loop(),在主循环会循环调用main_loop_should_exit()判断是否结束主循环。
main_loog_should_exit()函数中会通过qemu_powerdown_requested()函数判断qemu虚拟机是否接收到了powerdown的请求,如果有该请求,则调用qemu_system_powerdown(),该函数先发出POWERDOWN的事件,然后通知注册到powerdown的notifier函数
不同的主板,会注册不同的powerdown notifier
以piix4为例,在piix4_pm_realize函数中,会将piix4_pm_powerdwon_req()这个notify handler注册到qemu虚拟机的powerdown notifier中。