11

Как поместить уже запущенный процесс под nohup?

11

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

Как мне перевести его под управление nohup (то есть, как заставить его продолжать выполнение даже после закрытия терминала)?

5 ответ(ов)

2

Если по какой-то причине символ + также не работает, откройте другой терминал, найдите идентификатор процесса (используя команду ps) и выполните следующие команды:

kill -SIGSTOP PID
kill -SIGCONT PID

SIGSTOP приостановит выполнение процесса, а SIGCONT возобновит его выполнение в фоновом режиме. Таким образом, закрытие обоих терминалов не остановит ваш процесс.

1

Команда для отделения запущенной задачи от оболочки (то есть чтобы она продолжала работать в фоновом режиме, даже если оболочка закроется) — это disown в сочетании с базовой командой оболочки.

Согласно справочному руководству по bash (man bash):

disown [-ar] [-h] [jobspec ...]

Без опций каждая jobspec удаляется из таблицы активных задач. Если указана опция -h, каждая jobspec не удаляется, но помечается так, чтобы сигнал SIGHUP не отправлялся задаче, если оболочка получит SIGHUP. Если jobspec не указана, и опции -a или -r не заданы, используется текущая задача. Если jobspec не указана, опция -a означает удалить или пометить все задачи; опция -r без аргумента jobspec ограничивает действие работающими задачами. Значение возвращаемого кода равно 0, если jobspec указывает на допустимую задачу.

Это значит, что простая команда

disown -a

удалит все задачи из таблицы задач и сделает их независимыми от оболочки (nohup).

0

Это хорошие ответы выше, я просто хотел внести небольшое уточнение:

Вы не можете disown (отсоединить) PID или процесс, вы disown (отсоединяете) задачу, и это важное различие.

Задача — это понятие процесса, который привязан к оболочке, поэтому вам нужно отправить задачу в фон (не приостановить её) и только потом выполнить disown.

Проблема:

%  jobs
[1]  running java 
[2]  suspended vi
%  disown %1

Посмотрите http://www.quantprinciple.com/invest/index.php/docs/tipsandtricks/unix/jobcontrol/ для более подробного обсуждения управления задачами в Unix.

0

К сожалению, команда disown является специфичной для shell bash и недоступна во всех оболочках.

Некоторые версии Unix (например, AIX и Solaris) имеют опцию непосредственно в команде nohup, которую можно применить к запущенному процессу:

nohup -p pid

Дополнительную информацию можно найти по ссылке: http://en.wikipedia.org/wiki/Nohup

0

Вот простые и самые легкие шаги для управления процессами в терминале:

  1. Ctrl + Z ----------> Приостанавливает процесс
  2. bg --------------> Возобновляет и запускает процесс в фоновом режиме
  3. disown %1 -------------> Необходимо только в том случае, если нужно отсоединить процесс от терминала
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь