Получить информацию о процессе из команды nohup

521
Alli

Я использую nohupкоманду для запуска сценариев оболочки следующим образом:

nohup ./run.sh & 

Мой вопрос: после выхода из терминала и возвращения позже, как я могу получить информацию об этом процессе, если он завершен или все еще выполняется?

3

2 ответа на вопрос

1
Kamil Maciorowski

В общем, вы можете проверить вывод ps x. Либо есть, run.shлибо нет. Если есть, это может быть процесс, который вы ищете, или какой-то другой run.sh. Дальнейшее расследование может потребоваться.

Есть, однако, этот трюк. Примечание nohupпечатает сообщение как это:

 nohup: ignoring input and appending output to /home/alli/nohup.out 

Теперь вызовите:

lsof /home/alli/nohup.out 

Если ваш run.shвызванный с помощью nohupвсе еще работает, он должен появиться в выходных данных lsof(дважды, потому что nohupперенаправляет дескриптор файла 1и 2в nohup.out). Если вы использовали nohupболее одного раза, lsofследует вернуть несколько процессов. Если вы использовали nohupболее одного раза с одним и тем же исполняемым файлом, вам может потребоваться проверить /proc/$pid/( пример ), чтобы отличить их друг от друга.

Я бы использовал tmuxв первую очередь. На самом деле я использую его ежедневно.

1
Tomasz

Вы можете сохранить значение процесса nohupped в файле, используя $!сразу после запуска процесса с

nohup the_process & 

Затем, когда вы вернетесь, прочитайте PID и проверьте, запущен ли процесс. Если да, проверьте, какой процесс вы хотите. (Возможно, PID переназначен другому процессу.)

Если это не нарушает функционирование процесса, вы также можете передать процессу ложный аргумент, который будет служить вам подсказкой, когда вы читаете вывод ps. Например.:

$ cat p.bash  #!/bin/bash sleep 10 $ nohup ./p.bash some_id_hint & [1] 14139 nohup: ignoring input and appending output to 'nohup.out' $ echo $! 14139 $ ps 14139 PID TTY STAT TIME COMMAND 14139 pts/1 S 0:00 /bin/bash ./p.bash some_id_hint 

Похожие вопросы