我有一个 bash 命令,它将音频流从 avconv/ffmpeg 传输到另一个必须使用 sudo 运行的 bash 脚本:
avconv -i http://8273.live.streamtheworld.com:3690/WQHTFMAAC_SC -f wav -ac 1 -ar 22050 - | sudo ./pifm -
node.js 脚本用于时不时停止脚本:
var exec = require("child_process").exec,
signal = null;
var signal = exec("avconv -i http://8273.live.streamtheworld.com:3690/WQHTFMAAC_SC -f wav -ac 1 -ar 22050 - | sudo ./pifm -")
setTimeout(function() {
signal.kill('SIGINT')
},10000)
不幸的是,这不会杀死管道中的任何一个进程。
一些进一步的信息:
- 管道进程 (
console.log(signal.pid)
) 的结果 PID 不代表任何一个进程的 PID,我认为这与它是管道的事实有关? - 我能够
avconv
通过在 中添加一个来可靠地杀死第一个孩子 ( )signal.pid
,但是第二个进程的 PID(可能是因为它是 sudo )signal.pid
与top | grep
process
我还尝试使用节点模块终止进程:process.kill(this.current.pid,'SIGINT');
这也不起作用。
- 我宁愿避免使用 Node 在两个进程之间进行管道传输,因为我在低内存环境中运行它
我怀疑管道 bash 进程在某些方面是独一无二的,但我对 bash 的结局有点不满意!