![macOS 上的 QEMU:如果 QEMU 窗口不可见,后台进程会逐渐冻结](https://linux22.com/image/14544/macOS%20%E4%B8%8A%E7%9A%84%20QEMU%EF%BC%9A%E5%A6%82%E6%9E%9C%20QEMU%20%E7%AA%97%E5%8F%A3%E4%B8%8D%E5%8F%AF%E8%A7%81%EF%BC%8C%E5%90%8E%E5%8F%B0%E8%BF%9B%E7%A8%8B%E4%BC%9A%E9%80%90%E6%B8%90%E5%86%BB%E7%BB%93.png)
我在 Windows 10 计算机上有类似的设置,没有任何此类问题。本教程涉及 macOS 版本 10.15.2。
如果 QEMU 窗口不可见(隐藏、最小化或另一个应用程序处于全屏模式),QEMU 进程会逐渐冻结:它仍然运行,但 VM 不会响应外部请求,例如 Telnet 或 SSH,直到 QEMU 窗口打开。在桌面上可见。
我需要将 QEMU 作为单独的后台进程运行,因此我使用附加stty
命令来防止作业挂起。完整的命令行如下所示:
(sudo sleep 1; sudo ifconfig bridge0 addm tap0) &!
sudo stty -tostop
sudo qemu-system-x86_64 -nodefaults \
-cpu host -accel hvf -smp 1 -m 384 \
-device virtio-blk-pci,drive=flash0 \
-drive file=vios-adventerprisek9-m.vmdk.SPA.156-1.T.vmdk,if=none,format=vmdk,id=flash0 \
-device e1000,netdev=local -netdev tap,id=local,ifname=tap0,script=no,downscript=no \
-serial vc &
我没有使用该-daemonize
参数,因为当 QEMU 用它启动时没有任何反应:进程打开 TAP 接口,但不响应外部请求(使用时-monitor telnet:127.0.0.1:<PORT>,server,nowait
,连接是不可能的)。
我也尝试过其他方法,但没有成功:
nohup
disown
-icount sleep=no
-rtc base=...,clock=...,driftfix=slew
-overcommit cpu-pm=on
-no-hpet
-no-acpi
-machine hmat=on
我认为这是macOS桌面环境进程处理的一个功能,在某种程度上与功耗有关,但我不知道如何管理它。
更新:问题出在App Nap机制中,但是像defaults write NSGlobalDomain NSAppSleepDisabled -bool YES
现在的wokring、QEMU这样的方法仍然会进入App Nap启用状态。
如何为选定的终端进程关闭它?
更新:只有一种方法能够解决这个问题 - 在没有带有-display none
参数的桌面窗口的情况下启动进程(并且带有-serial stdio
参数从串行线输出到 STDIO)。