Я использую команду nohup
для запуска сценариев оболочки следующим образом:
nohup ./run.sh &
Мой вопрос: после выхода из терминала и возвращения позже, как я могу получить информацию об этом процессе, если он завершен или все еще выполняется?
Я использую команду nohup
для запуска сценариев оболочки следующим образом:
nohup ./run.sh &
Мой вопрос: после выхода из терминала и возвращения позже, как я могу получить информацию об этом процессе, если он завершен или все еще выполняется?
В общем, вы можете проверить вывод 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
в первую очередь. На самом деле я использую его ежедневно.
Вы можете сохранить значение процесса nohup
ped в файле, используя $!
сразу после того, как вы начали процесс с
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