【问题标题】:How do I wait for sub-process to complete in Linux [closed]如何在 Linux 中等待子进程完成 [关闭]
【发布时间】:2018-12-20 01:29:47
【问题描述】:

我需要使用aplay 播放波形文件。但是,我的波形文件只有几秒钟的长度。所以我计划在一段时间内循环播放它们。 aplay 似乎没有循环选项。从我的 C 文件中使用 popen() 创建一个子进程播放工作正常。但难点是无法监控波形文件播放完成的时间,以便重新开始。

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

我怎么知道这个命令何时结束播放?

提前致谢!

【问题讨论】:

  • 或者,您可以使用 SDL 等库独立于驱动程序(alsa、pulse 等)播放音频。

标签: c linux popen alsa


【解决方案1】:

您可以从手册页here 中查找 aplay 的各种选项

其中一个选项是 -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.

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

【讨论】:

  • 我在手册页中看到了这个,但操作不匹配。即使使用-d 0选项,它也会在wave文件结束后终止。
  • The default is zero, so if this option is omitted then the arecord process will run until it is killed. 表示录制将无限期地继续。不播放。
【解决方案2】:

来自popen 联机帮助页:

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

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

【讨论】:

    猜你喜欢
    • 2013-09-24
    • 1970-01-01
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 2011-06-26
    相关资源
    最近更新 更多