macOS 上的 QEMU:如果 QEMU 窗口不可见,后台进程会逐渐冻结

macOS 上的 QEMU:如果 QEMU 窗口不可见,后台进程会逐渐冻结

我在 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)。

相关内容