超时命令不超时

timeout command not timing out

我在长时间 运行 sox 记录超时方面遇到了一些问题。

需要该命令,因为 sox 从进程获取标准输出,但它不是永久的数据流(但会因静默而中断)。但是当 sox 被告知总共要录制 30 秒时,它会一直录制到音频文件有 30 秒的声音为止。所以我希望命令在 35 秒后超时,如果它之前没有完成的话。

bash 脚本中使用的命令:

timeout 35s sox [--some --sox --parameters] trim 0 30

现在的问题是给定的命令可能需要 35 秒到 10 分钟以上的时间,我不知道为什么。

似乎完全随机需要多长时间,音频文件在 1 秒到 13 秒之间。

所以也许这里有人有想法,可能如何解决问题等

terminate signal handler in sox just sets the flag user_abort, which is checked by the Callback for monitoring flow progress每个缓冲区一次,所以sox等到缓冲区变满可以解释信号响应的长时间延迟。如果您指定较小的缓冲区大小,情况可能会有所改善,但这不是解决方案。

我现在注意到您写了 sox 从进程中获取标准输出。如果您 timeout 该进程而不是 sox,关闭其输入源应该会导致 sox 立即终止。

Unfortunately that's not a suitable solution as the "main process" (sox gets the stdout from) runs 24/7 and shouldn't be interrupted.

您可以改为将 cat 连接到输入,然后 timeout 35 cat | sox …