繁体   English   中英

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

[英]Linux shell hangs on running multiple instances of an application

我正在通过popen()从C程序运行“ flute”(发送多播通信的协议)应用程序/二进制文件(已下载)。 该应用程序具有一个功能/错误,该功能/错误不会在后台运行,因为它使用外壳程序执行一些命令。 在运行期间,应用程序将锁定外壳。 这意味着您只能在shell中键入一些预定义的字母,否则必须等到最后。 因此,当我从c代码使用popen()运行应用程序的多个实例时,shell会永久挂起,这可能是因为两个应用程序都试图同时使用它(我的假设)。 但是我可以在不同的shell中手动运行多个实例。 这是从C程序运行它的示例代码。

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

有什么解决方法可以防止外壳挂起。 请帮忙。

如果该进程只是因为它向您的pF发出了提示而挂起,现在被阻止从继承的stdin中读取,则可以:

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

如果该进程因正在使用继承的终端确实在做某事而挂起,则可以为每个子进程创建一个伪终端,这样它们就不会与同一个控制终端发生混乱。 请参阅此问题以供参考。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM