如何在Linux中等待子流程完成

时间:2018-07-11 22:38:23

标签: c linux popen alsa

我需要使用aplay播放wave文件。但是,我的wave文件的长度只有几秒钟。因此,我计划将它们循环播放一段时间。 aplay似乎没有循环选项。在我的C文件中,使用popen()创建一个子进程。回放工作正常。但是困难在于我无法监视wave文件播放的完成时间,因此我可以重新开始。

popen("aplay WaveFile","r");

我怎么知道该命令何时完成播放?

谢谢!

2 个答案:

答案 0 :(得分:2)

popen联机帮助页中:

  

pclose()函数等待关联的进程终止,并返回wait4(2)返回的命令的退出状态。

如果您不想在pclose上被阻塞,可以在popen返回的管道上尝试non-blocking reads,直到得到EOF,这意味着过程已终止。

答案 1 :(得分:0)

您可以从手册页here中查找各种播放选项。

选项之一是-d,即

-d, --duration=#
Interrupt after # seconds. A value of zero means infinity. The default is zero, so if this option is omitted then the arecord process will run until it is killed.

因此,如果您知道wave文件的播放持续时间,则可以使用-d给出该数字。 有多种计算波形文件长度的方法,例如here