我正在通过 popen() 从 C 程序运行“长笛”(一种用于发送多播流量的协议(protocol))应用程序/二进制文件(我下载)。这个应用程序有一个特性/错误,它不在后台运行,因为它使用 shell 来执行一些命令。并且在运行期间,应用程序锁定了 shell。这意味着您只能在 shell 中键入一些预定义的字母,否则您必须等到最后。因此,当我使用 c 代码中的 popen() 运行应用程序的多个实例时,shell 会永久挂起,这可能是因为两个应用程序都试图同时使用它(我的假设)。但是我可以在不同的 shell 中手动运行多个实例。这是从 C 程序运行它的示例代码。
FILE* pF = popen("./flute -send -a226.0.0.1/6789 /media/song.mp3", "r");
有什么解决办法可以让shell不挂。请帮忙。
最佳答案
如果进程只是挂起,因为它向您的 pF
写了一个提示,现在被阻止从继承的标准输入读取,您可以:
- 将从
pF
读取的提示转发到stdout
,以便它显示在终端上 - 然后您就会知道何时输入/输入什么 - 或手动
fork
并拦截stdin
和stdout
:然后提示不会转到您的终端,您的程序可以发送以编程方式“预定义的字母”
如果进程挂起是因为它真的在用继承的终端做一些事情,你可以为每个子进程创建一个伪终端,这样它们就不会搞乱同一个控制终端。参见 this question供引用。
关于c - Linux shell 在运行一个应用程序的多个实例时挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26379993/