如何等待子流程在 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,这意味着进程已经已终止。
我需要使用 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 bywait4(2)
.
如果你不想在 pclose
上被阻塞,你可以在 popen
返回的管道上尝试