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