我正在使用spawn函數與mjpg_streamer。但是,子進程一旦創建就立即退出。下面是我使用node.js產卵。退出事件立即發射
streamingProcess = spawn('mjpg_streamer', [
'-i', '"/usr/local/lib/input_file.so -f ' + IMAGE_PATH + ' -n ' + IMAGE_NAME + '"',
'-o', '"/usr/local/lib/output_http.so -w /usr/local/www"'
]);
streamingProcess.on('exit', function(code, signal) {
console.log('streaming process has stopped. Code: ' + code + ', signal: ' + signal);
streamingProcess = null;
});
運行的實際命令本身的代碼返回如下:
什麼mjpg_streamer命令實際上做的是火了一個網絡服務器。退出回調中的代碼是1,信號是null
。
不太清楚是怎麼回事...
UPDATE:
如果我使用exec
,然後正常工作!但是,如果我叫殺,這個過程不會死!
所以
streamingProcess = exec('LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -w /usr/local/www"');
確實火起來的網絡服務器,但現在如果我叫
streamingProcess.kill()
退出事件觸發,但過程本身不會死。在進一步的檢查中,似乎pid(從節點子進程和os上)不一樣?
現在我很困惑...
更新2:
好吧,我想我開始明白是怎麼回事exec
。所以它在一個子shell中執行命令,這對我來說是創建兩個進程。一個是subhell,另一個是mjpg_streamer命令本身。所以殺死exec
只會殺死子shell。但是mjpg_streamer仍然存在。
從節點:
從OS:
所以3752是實際的命令我要殺死。我想沒有辦法讓我從節點獲得這個pid? :)
DUDE。非常感謝! – Umair