avconv/ffmpeg から sudo で実行する必要がある別の bash スクリプトにオーディオ ストリームをパイプする 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 も表していません。これは、パイプであるという事実に関連していると思いますか? avconv
に1 つ追加することで、最初の子 ( ) を確実に殺すことができましたsignal.pid
が、2 番目のプロセスの PID (おそらく sudo であるため) は に関連していないsignal.pid
ため、複雑なtop | grep
構文を作成せずに確実に殺すことは不可能でした。process
ノードモジュールを使用してプロセスを強制終了しようとしました:process.kill(this.current.pid,'SIGINT');
どちらも機能しませんでした。
- これを低メモリ環境で実行しているため、Node を使用して 2 つのプロセス間をパイプすることは避けたいと思います。
パイプされた bash プロセスは何らかの点で独特であると思いますが、bash の終焉については少し的外れです!