Как следить за процессом в Linux и ловить неожиданное завершение? - PullRequest
0 голосов
/ 06 июня 2018

Описание среды

Сначала я запускаю bash-shell в фоновом режиме.И записать stdout и stderr в файл журнала ./out.

(bash ./myshell.sh > ./out 2>&1)&

В оболочке будут запускаться несколько программ, таких как Node.js последовательно.

node program.js --number 1
node program.js --number 2
node program.js --number 3
...

Я могу проверить состояние выполнения по ps, пример ниже:

$ ps ux | grep shell
user 10001 (skipped...)  bash ./myshell.sh

$ ps ux | grep node
user 10002 (skipped...)  node program.js --number 1

Задача

А затем,возможно, запустите 2-ю программу в процессе, процессы будут убиты (или прекращены) одновременно.

Подсказка 1

Мы можем предположить 3-я программа будет запущен, потому что 2-я программа остановлена.Фактически, bash-shell и 2-ая программа завершаются по неизвестной причине.

Подсказка 2

Я покинул stderr через (... > ./out 2>&1)&.Но я не могу получить сообщение из файла журнала.Я просто знаю, 2-я программа была мгновенно остановлена.


Заключение

Я хочу найти инструмент, который может отслеживать мой процесс по конкретному процессуid или другие подобные решения, чтобы сделать это.

1 Ответ

0 голосов
/ 06 июня 2018

Если вы хотите проверить, существует ли еще процесс, используя его идентификатор, то вы можете использовать что-то вроде этого:

kill -0 $pid

-0 здесь отменит команду killи вместо этого выдайте вывод.

В качестве альтернативы, если вы действительно хотите воздействовать на код выхода, игнорируя вывод kill, вы можете сделать что-то более программируемое:

if ! kill $pid > /dev/null 2>&1; then echo "Could not send SIGTERM to process $pid" >&2 fi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...