日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

退出qemu_qemu虚拟机的关机方式

發(fā)布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 退出qemu_qemu虚拟机的关机方式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

qemu虛擬機的關(guān)閉方式主要包括如下幾種方式:通過qemu monitor的system_powerdown命令進行關(guān)閉,

在libvirt對qemu進行管理的情況下,通過virsh shutdown命令進行關(guān)閉。

在虛擬機內(nèi)使用Guest OS自帶的關(guān)機按鈕進行關(guān)閉。

通過qemu monitor的quit命令進行關(guān)閉。

在libvirt對qemu進行管理的情況下,通過virsh destroy命令進行關(guān)閉。

在主機端通過Ctrl+C強制關(guān)閉qemu進程關(guān)閉虛擬機。

kill/pkill命令結(jié)束進程

1. qemu monitor的system_powerdown命令

system_powerdown是qemu monitor中支持的一個命令。

qemu進程的主循環(huán)位于vl.c:main_loop(),在主循環(huán)會循環(huán)調(diào)用main_loop_should_exit()判斷是否結(jié)束主循環(huán)。

main_loog_should_exit()函數(shù)中會通過qemu_powerdown_requested()函數(shù)判斷qemu虛擬機是否接收到了powerdown的請求,如果有該請求,則調(diào)用qemu_system_powerdown(),該函數(shù)先發(fā)出POWERDOWN的事件,然后通知注冊到powerdown的notifier函數(shù)

不同的主板,會注冊不同的powerdown notifier

以piix4為例,在piix4_pm_realize函數(shù)中,會將piix4_pm_powerdwon_req()這個notify handler注冊到qemu虛擬機的powerdown notifier中。

該notifier handler主要是調(diào)用acpi_pm1_evt_power_down()函數(shù),在該函數(shù)中,會檢測在該虛擬機主板上,電源鍵(Power Button)是否被使能,如果被使能了,則模擬該電源鍵被按下,發(fā)送SCI(System Control Interrupt)中斷,觸發(fā)Guest OS進行關(guān)機。

所以qemu monitor的system_powerdown命令本質(zhì)上是模擬電源鍵被按下觸發(fā)SCI中斷的動作。至于Guest OS是否會關(guān)機,則由Guest OS的行為配置決定的,如在Windows中,如果在電源設(shè)置中,將Windows的電源按鍵設(shè)置為不響應(yīng),則發(fā)送system_powrdown命令后,Windows將不做響應(yīng),無法實現(xiàn)虛擬機關(guān)機,除非Windows中將電源鍵功能設(shè)置為關(guān)機。

2. virsh shutdown命令

virsh shutdown命令會調(diào)用到libvirt的virDomainShutdown()函數(shù),該函數(shù)會繼續(xù)調(diào)用不同類型hypervisor的shutdown函數(shù),如對于qemu而言,它會調(diào)用到qemu dirver對應(yīng)的domainShutdown,即qemuDomainShutdown(),在該函數(shù)中,會執(zhí)行如下操作:檢測Qemu Guest Agent是否存在,如果存在并且可用,則通過Qemu Guest Agent告知Guest OS進行關(guān)機操作。

如果Qemu Guest Agent不存在,則檢測qemu虛擬機是否支持ACPI Power Button,如果支持,則調(diào)用qemuMonitorSystemPowerdown()函數(shù),即在qemu monitor中,發(fā)送system_powerdown命令,模擬電源鍵被按下并出發(fā)SCI的動作,觸發(fā)Guest OS進行關(guān)機。

所以,在不用Qemu Guest Agent的情況下,virsh shutdown命令其實就對應(yīng)到qemu monitor中的system_powerdown命令,只是該命令由libvirt發(fā)送。

3. Guest OS關(guān)機接口

在虛擬機內(nèi)使用Guest OS自帶的關(guān)機按鈕/功能進行關(guān)機,以Ubuntu為例,通過systemctl poweroff命令對Ubuntu進行關(guān)機,該命令會調(diào)用到kernel/power/poweroff.c文件中定義個poweroff_work對應(yīng)的工作,該工作主要是執(zhí)行do_poweroff()對系統(tǒng)進行關(guān)機。

kernel/power/poweroff.c:do_poweroff() -> kernel_power_off() ,該函數(shù)關(guān)閉所有的用戶程序和設(shè)備,最后調(diào)用machine_power_off()函數(shù)。

machine_power_off() -> power_off() -> native_machine_poweroff() -> pm_power_off() 若該Ubuntu運行的虛擬機支持ACPI標準,則pm_power_off將指向acpi_power_off()函數(shù)。

acpi_power_off() -> acpi_enter_sleep_state()

該函數(shù)將會往ACPI標準中規(guī)定的寄存器PM1 Control Registers Fixed Hardware Feature Control Bits中的SLP_TYPE和SLP_EN域?qū)懴鄳?yīng)的數(shù)據(jù),讓虛擬機主板進入到指定的睡眠狀態(tài),即ACPI標準中定義的S0 ~ S5狀態(tài)。

而在qemu模擬器方面,在hw/acpi/core.c中會對PM1 Control Registers Fixed Hardware Feature Control Bits的寫進行監(jiān)控,當向SLY_TYP和SLY_EN寫特定值的時候,會觸發(fā)qemu調(diào)用qemu_system_shutdown_request()發(fā)出shutdown的請求。

qemu進程的主要循環(huán)函數(shù)main_loop()中,會循環(huán)調(diào)用main_loop_should_exit()函數(shù),該函數(shù)會檢測系統(tǒng)中是否有shutdown的請求發(fā)出。若有shutdown的請求,則qemu進程退出主循環(huán),結(jié)束并退出qemu虛擬機。

4. qemu monitor的quit命令

qemu monitor的quit命令讓qemu進程直接退出。

直接在qemu monitor中輸入quit命令,將觸發(fā)qemu虛擬機直接退出,Guest OS完全不知道虛擬機即將關(guān)閉,所以對Guest OS來說,將會直接閃退,類似物理機的直接掉電。

quit命令將調(diào)度到qemu的hmp_quit()函數(shù),該函數(shù)將會告知qemu進程在虛擬機關(guān)閉的時候退出,同時發(fā)出shutdown的請求,qemu進程的主循環(huán)main_loop()在執(zhí)行main_loop_should_exit()檢查是否需要退出主循環(huán)的時候,將檢測到該事件,然后直接退出。

5. virsh destroy命令

libvirt提供的virsh destroy命令,將調(diào)用到qemu driver的qemuDomainDestroy() -> qemuDomainDestroyFlags() -> qemuProcessStop() -> qemuProcessKill()接口,將qemu進程關(guān)掉。

qemuProcessKill()中,將會向qemu進程發(fā)送SIGKILL或SIGTERM信號,讓qemu進程退出。

在qemu這邊,qemu的主進程中,會通過os_setup_signal_handling()設(shè)置對信號的響應(yīng)。

termsig_handler() -> qemu_system_killed(),在qemu_system_killed()中,將會生成shutdown的請求,并且shutdown請求的原因是host signal。該請求將會讓qemu進程的主循環(huán)退出,不等Guest OS準備好關(guān)機。

6. Ctrl+C組合鍵

在主機端通過Ctrl+C組合鍵,讓qemu進程退出,其實是向qemu進程發(fā)送SIGINT信號,該信號的處理方式和SIGTERM是一樣的,也就是最后調(diào)用到qemu_system_killed()函數(shù),發(fā)出shutdown請求,讓qemu主進程退出,同時記錄下shutdown的原因為host signal。

7. kill/pkill命令

在主機端使用kill -9 pid或者pkill -9 pname的方式,也是向主機進程發(fā)送SIGKILL信號,讓進程退出的。

總結(jié)

以上是生活随笔為你收集整理的退出qemu_qemu虚拟机的关机方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲天堂一区在线观看 | 免费成人黄色片 | 久久一二三四区 | 中国一级特黄录像播放 | 日韩在线视频网址 | 一级黄色淫片 | 亚洲天堂第一 | 亚洲夜夜爽 | 久久久久一区二区 | 亚洲欧美一区二区三区四区 | 玖玖在线免费视频 | 亚洲成人xxx| 男女操操视频 | 另类欧美亚洲 | 九九av| 午夜精品久久久久久久久久久久久蜜桃 | 无码人妻一区二区三区免费n鬼沢 | 草莓视频成人在线 | 国产激情成人 | 韩国三级视频 | av黄色免费网站 | 精品国产一区二区三区四 | 国产亚洲综合精品 | 浪潮av一区二区三区 | 日韩草比| 美女视频黄的免费 | 第一页在线 | 国产一区免费在线观看 | 欧美性教育视频 | 天堂在线8| 欧美成人aaa片一区国产精品 | 蜜臀久久99精品久久久画质超高清 | 天天操天天干天天操 | 99精品视频一区二区三区 | 中文字幕第四页 | 久久欧 | 91国语对白| 91久久精品国产91久久性色tv | 欧美疯狂做受 | 五月婷婷综合色 | 超碰国产一区二区三区 | 久青草免费视频 | 亚洲香蕉av | 天天色天天操天天 | 久久久久久久久久国产 | 精品久久综合 | 久草视频免费看 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 古代玷污糟蹋np高辣h文 | 婷婷激情视频 | 人与动物毛片 | 加勒比不卡视频 | 国产噜噜噜 | 放荡闺蜜高h季红豆h | 电影《走路上学》免费 | 又黄又爽无遮挡 | 久久久久久久久久久久久久国产 | 欧美成人高清 | 人人妻人人澡人人爽欧美一区 | 国产免费又黄又爽又色毛 | 手机看片一区二区 | 亚洲4区 | 国产精品羞羞答答在线 | av一区不卡 | 日韩精品在线观看一区二区 | 国产精品视频合集 | 欧美日韩系列 | 五月婷婷激情在线 | 欧美日本一道本 | 日韩视频一 | 成人毛片视频免费看 | 欧美一区二区三区小说 | 午夜免费激情视频 | 日韩天堂 | 精品午夜视频 | 美女视频黄频视频大全 | 99视频在线精品免费观看2 | 国产中文一区 | 毛片网站视频 | 日韩八区 | 新91在线 | 奇米影视四色7777 | 91视频首页 | 农村脱精光一级 | 欧美一级在线播放 | 久久橹 | www国产精品内射老熟女 | 波多野在线播放 | 国产片网址 | 日本黄视频在线观看 | av日韩不卡| 亚洲 成人 av| 亚洲日本中文字幕在线 | 国产精品中文字幕在线 | 国产高潮又爽又无遮挡又免费 | 超碰av在线 | 欧美精品久久久久久久久 | 精品国产丝袜一区二区三区乱码 | 欧美一级片观看 |