Запустите процесс 'stdin / stdout с помощью node.js - PullRequest
4 голосов
/ 17 ноября 2011

Я запускаю процесс с узла с child_process.spawn , обрабатываю события данных process.stdout / stderr и записываю в stdin.

Теперь, мое приложение узла может аварийно завершить работу или быть остановлено, когда он перезапускается, я нахожу процесс по его PID, а затем я хотел бы снова присоединиться к процессу 'stdin / stderr / stdout.

Рассматриваемый процесс может быть любой программой, похожей на демон, поэтому я не могу контролировать его поведение (например, я не могу настроить процесс на перенаправление его stdio при получении сигнала).

Я думаю обернуть процесс с помощью screen, перенаправить stdio в файл FIFO (но опция customFds устарела в узле 6), но ничего из этого не выглядит таким чистым, как process.stdin.on ...

1 Ответ

0 голосов
/ 28 декабря 2011

Там может быть более простой способ, используя fuser Я создал здесь ситуацию, когда node.js породил процесс и умер

xxx@ubuntu:~/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 Я вижу pids, которые я создал

xxxx@ubuntu:~$ fuser node
node:                16490c 16491

Просто чтобы быть уверенным в двойстве - при запуске ps я вижу соответствующие pids

xxxx@ubuntu:~$ 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 доубивать и убирать пиды начали с /opt/node.Я лично использую fuser регулярно на работе и дома, чтобы очистить все оставшиеся процессы.

Я проверил fuser на Ubuntu и Solaris.

ПРИМЕЧАНИЕ: единственное, к чему вам следует быть осторожным, это то, что если в этом каталоге есть сеанс SSH, он будет очищен вместе с любым другим процессом, запущенным из этого каталога.

...