Linux shell在运行应用程序的多个实例时挂起

时间:2014-10-15 10:14:58

标签: c linux bash shell popen

我正在演奏长笛' (用于发送多播流量的协议)应用程序/二进制(我下载)由popen()从C程序。此应用程序有一个功能/错误,它不在后台运行,因为它使用shell来执行一些命令。在运行期间,应用程序会锁定shell。这意味着您只能在shell中键入一些预定义的字母,否则您必须等到结束。因此,当我使用来自c代码的popen()运行应用程序的多个实例时,shell会永久挂起,可能是因为两个应用程序都试图同时使用它(我的假设)。但我可以在不同的shell中手动运行多个实例。以下是从C程序运行它的示例代码。

FILE* pF = popen("./flute -send -a226.0.0.1/6789 /media/song.mp3", "r");

是否有任何解决方案,以便shell不会挂起。请帮忙。

1 个答案:

答案 0 :(得分:1)

如果该进程刚刚挂起,因为它向您的pF写了一个提示,现在被阻止从继承的stdin中读取,您可以:

  • 将提示从pF转发到stdout,以便它显示在终端上 - 然后您就会知道何时/输入什么
  • 或手动fork并截取stdinstdout:然后提示将不会转到您的终端,您的程序可以通过编程方式发送“预定义字母” / LI>

如果进程因为它确实对继承的终端做了一些事情而挂起,那么你可以为每个子进程创建一个伪终端,这样他们就不会弄乱同一个控制终端。请参阅this question以供参考。