3

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

nohup ./run.sh &

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

2 ответа2

1

В общем, вы можете проверить вывод 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

Вы можете сохранить значение процесса 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .