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

How do I wait for sub-process to complete in Linux

我需要使用 aplay 播放一个 wave 文件。但是,我的波形文件只有几秒钟的长度。所以我打算在一段时间内循环播放它们。 aplay 好像没有循环选项。从我的 C 文件创建一个使用 popen() 的子进程播放正常​​。但困难的是,我无法监控 wave 文件播放何时完成,以便我可以重新开始。

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

我如何知道此命令何时播放完毕?

提前致谢!

您可以从手册页中查找 aplay 的各种选项 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

来自 popen 联机帮助页:

The pclose() function waits for the associated process to terminate and returns the exit status of the command as returned by wait4(2).

如果你不想在 pclose 上被阻塞,你可以在 popen 返回的管道上尝试 ,直到你得到一个 EOF,这意味着进程已经已终止。