4

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 の終焉については少し的外れです!

4

2 に答える 2