如何在进程结束后自动closures`qemu`的执行?

我希望打开和显示输出后的qemu窗口在运行pintOS后自动closures

就像我运行命令pintos -- run alarm-multipletcsh shell中pintos -- run alarm-multiple ,qemu显示进程开始 ,然后一些alarm-notifications ,然后进程结束 ,但之后,qemu窗口将不会closures

我想成功完成系统调用后退出窗口。

Solutions Collecting From Web of "如何在进程结束后自动closures`qemu`的执行?"

对于更新版本的qemu,您需要使用该选项运行它

 -device isa-debug-exit 

在写入IO端口时会退出,默认为0x501

src / utils目录下的pintos项目中,您需要将一行添加到run_qemu子例程中的pintos文件

 sub run_qemu { print "warning: qemu doesn't support --terminal\n" if $vga eq 'terminal'; print "warning: qemu doesn't support jitter\n" if defined $jitter; my (@cmd) = ('qemu-system-i386'); push (@cmd, '-device', 'isa-debug-exit'); # <====== add this line .. .. push (@cmd, '-monitor', 'null') if $vga eq 'none' && $debug eq 'none'; run_command (@cmd); } 

并在devices目录下的shutdown.c文件中,在for循环之后的shutdown_power_off函数中添加此行

 for (p = s; *p != '\0'; p++) outb (0x8900, *p); outb (0x501, 0x31); // <====== add this line 

Qemu的退出代码是加一的值的两倍,所以没有办法退出干净。 使用0x31应该导致0x63的qemu退出码

最后用-q选项运行pintos

 pintos -q run alarm-multiple