linux - execvp 后 QEMU 无终端输出

标签 linux exec fork qemu tty

我将 QEMU 用作带有 PetaLinux 内核的模拟器(仅限终端,带有 -ngraphic 选项)。

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

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

原因是什么?

最佳答案

我找到了解决方案。问题是因为子进程使用 SIGUSR1 向父进程发出某些事件信号。显然,QEMU 本身使用 SIGUSR1 因此存在处理程序的冲突,可能两个处理程序都已被调用,并且不知何故父进程被卡住。将信号更改为 SIGUSR2 后一切正常。希望 QEMU 内部不再发生冲突。

关于linux - execvp 后 QEMU 无终端输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31610671/

相关文章:

linux - 我可以将 swift 制作的 cocoa 应用程序移植到 Windows 和 Linux 吗?

c - 获取 X11 中当前事件修改器的状态

python - 如果Python的exec和eval被编译了?

git - fork 一个 git repo 的目的是什么?

c - 使用 fork() 在子进程和父进程中创建的不同数组具有相同的逻辑地址

linux - 启动 Vagrant 时连接超时

python - 如何在 Linux 下将 EDB(ms 交换存储文件)提取到 PST? (最好是Python)

c++ - (C++,Unix)在同一父进程中使用两个execlp

php - 浏览器挂起执行运行 Powershell 的 PHP

c - 如何仅在 C 中列出一级目录?