2011-11-17 33 views
3

我正在從節點child_process.spawn開始一個進程,並處理process.stdout/stderr數據事件並寫入stdin。使用node.js獲取正在運行進程的stdin/stdout

現在,我的節點應用程序可能會崩潰或得到停止,當它重新啓動時,我通過它的PID找到進程,然後我想重新附加進程的stdin/stderr/stdout。

有問題的進程可能是任何類似守護程序的程序,所以我無法控制它的行爲(例如,我無法設置進程在接收信號時重定向它的stdio)。

我想利用屏幕包裹的過程中,重定向標準輸入輸出到FIFO文件(但customFds選項在節點6不建議使用),但沒有這似乎process.stdin.on乾淨...

回答

0

有可能是一個更簡單的方法,使用fuser我創建了這裏的情況,這裏的node.js催生了一個過程,死亡

[email protected]:~/node$ node index.js 
Server has started 
Request for/received. 
About to route a request for/
Request handler 'start' was called 

/home/xxx/node/requestHandlers.js:27 
response.write(body); 
      ^
ReferenceError: body is not defined 
at Object.start (/home/xxx/node/requestHandlers.js:27:17) 
at route (/home/xxx/node/node/router.js:4:18) 
at Server.onRequest (/home/xxx/node/node/server.js:9:3) 
at Server.emit (events.js:70:17) 
at HTTPParser.onIncoming (http.js:1478:12) 
at HTTPParser.onHeadersComplete (http.js:102:31) 
at Socket.ondata (http.js:1374:22) 
at TCP.onread (net.js:348:27) 

如果我跑fuser <directory from which node started - 例如fuser /opt/node,我看到了我的PID創建

[email protected]:~$ fuser node 
node:    16490c 16491 

只是要雙重肯定 - 運行ps,我可以看到匹配的PID

[email protected]:~$ ps -ef | grep find | grep -v grep 
xxxx  16490  1 0 17:39 pts/0 00:00:00 /bin/sh -c find/-name 'moo'  
xxxx  16491 16490 21 17:39 pts/0 00:00:04 find/-name moo 

我可以運行fuser -k /opt/node殺和清理的PID從/opt/node開始。我個人經常在工作和家中使用fuser清理任何剩餘的過程。

我在Ubuntu和solaris上測試了fuser

NOTE:唯一需要注意的是,如果在該目錄上存在SSH會話,它將與該目錄中啓動的任何其他進程一起被刪除。

相關問題