execvp后QEMU没有终端输出

QEMU no terminal output after execvp

QEMU 被我用作带有 PetaLinux 内核的仿真器(仅限终端,带有 -nographic 选项)。

一开始 QEMU 会自行初始化,一旦准备就绪,它就会启动系统。通常,引导消息会在此过程中打印在终端中。在这种情况下,一切正常,系统启动,可以登录和使用系统。 然后,实现了另一个简单的外围设备,它同样被初始化(打印控制消息到输出),其余的以同样的方式进行。

当从外围实现内部产生子进程时(fork() 后跟 execvp()),问题就出现了。 QEMU 主进程(父)不再打印到终端输出,新进程(子)只能这样做。看起来父进程可能仍在执行但失去了终端。没有它就看不到登录提示,所以基本上根本无法使用系统。

这是什么原因?

我找到了解决方案。问题是因为子进程正在使用 SIGUSR1 向父进程发送一些事件信号。显然,QEMU 本身使用 SIGUSR1 所以处理程序发生冲突,可能它们都已被调用,并且父进程以某种方式冻结。将我的信号更改为 SIGUSR2 后一切正常。希望不会再与 QEMU 内部发生冲突。