gpt4 book ai didi

bash - Node.js 执行程序 : best way of killing a child pipe and all of its children

转载 作者:搜寻专家 更新时间:2023-11-01 00:08:49 26 4
gpt4 key购买 nike

我有一个 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)

不幸的是,这不会终止管道中的任何一个进程。

一些进一步的信息:

  • 管道进程的结果 PID (console.log(signal.pid)) 不代表任一进程的 PID,我认为这与它是管道这一事实有关吗?
  • 我能够通过向 signal.pid 添加一个进程可靠地杀死第一个子进程 (avconv),但是第二个进程的 PID(大概是因为它是 sudo ) 与 signal.pid 无关,因此如果不精心设计 top | 就不可能可靠地杀死它grep 语法
  • 我还尝试使用 Node process 模块终止进程:

    process.kill(this.current.pid,'SIGINT');

    这也不起作用。

  • 我宁愿避免使用 Node 在两个进程之间进行管道传输,因为我在低内存环境中运行它

我怀疑管道 bash 进程在某种程度上是独一无二的,但我对 bash 的结尾有点不适应!

最佳答案

我才想起我遇到过类似的问题,用awk推送命令解决了,

awk '{system("avconv -i http://8273.live.streamtheworld.com:3690/WQHTFMAAC_SC -f wav -ac 1 -ar 22050 - | sudo ./pifm -")}'
PID=$!


setTimeout(function() {
sudo kill $PID #(Can try to force it with kill -9 instead)
},10000)

这样你就真正杀死了拥有该命令的进程。我不确定它是否会在您的环境中起作用。再见了, friend ,希望我能帮到你!

关于bash - Node.js 执行程序 : best way of killing a child pipe and all of its children,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15915456/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com