在execvp之后QEMU没有终端输出

时间:2015-07-24 12:33:53

标签: linux exec fork qemu tty

我使用QEMU作为PetaLinux内核的模拟器(仅限终端,-nographic选项)。

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

当从外围设备实施中产生子进程(fork()后跟execvp())时,问题就会出现。主QEMU进程(父进程)不再打印到终端输出,新进程(子进程)只能执行此操作。似乎父进程可能仍在执行但丢失了终端。没有它就看不到登录提示,所以基本上根本不能使用系统。

是什么原因?

1 个答案:

答案 0 :(得分:0)

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