我尝试在 Mac 上运行 Qemu,但遇到了一些困难。我使用的是 OS X 10.8.2,并通过其存储库安装了 Qemu 1.2.50。
更新:刚刚升级到 Qemu 1.3.50,问题仍然存在。
当我跑步时
qemu-system-i386
从命令行一切正常,我可以使用 Ctrl-C 终止执行。但是,一旦我添加 -vnc :0,我就无法再在不从活动监视器中终止进程的情况下终止。
我的问题是,我不仅会时不时手动启动 Qemu,而且我有一个 Java 程序需要 Qemu 通过 vnc 协议执行某些任务,因此手动关闭不是一个选项。
因此基本上在我的程序中的某个时刻我启动了一个线程来执行以下任务:
Runtime rt = Runtime.getRuntime();
process = rt.exec("/usr/local/bin/qemu-system-i386 -vnc :0");
// Some stuff via vnc protocol
稍后,我会从主线程中调用:
process.destroy();
这不会终止 OS X 上的 Qemu。相同的代码适用于 Ubuntu 12.10 上的 Qemu 1.2.0
所以我想我的问题是如何在 OS X 上启用 vnc 的情况下正确关闭 Qemu。
或者也许我可以尝试像活动管理器那样强制退出 Qemu 进程?
答案1
2017年8月18日更新:该问题似乎已在 QEMU 2.9.0 版中得到解决
我向 Qemu 提交了一个错误报告并得到了回复:
有趣的是——我的经验是,即使使用 Cocoa UI 前端,Control-C 也根本不起作用。这是与信号处理相关的某种错误,但我无法追踪它。据我所知,使用调试器 QEMU 从未收到过 SIGTERM,这对我来说毫无意义。
作为一种解决方法,您可以向 QEMU 发送 SIGKILL,这将突然终止 QEMU(请注意,如果您有一个可写的磁盘映像,您可能会发现它已损坏,因为这距离干净关闭还有很长的路要走)。最好的方法是让客户机干净地关闭虚拟机,这应该会导致 QEMU 自动退出。