Как остановить nohup в linux
Перейти к содержимому

Как остановить nohup в linux

  • автор:

как завершить процесс nohup? [дубликат]

Запустил следующей командой: nohup python3 /home/python_ml/BotMainPart.py Как мне остановить выполнение данного процесса?

Отслеживать
задан 30 ноя 2018 в 12:17
Иван Анатоьевич Иван Анатоьевич
33 1 1 серебряный знак 4 4 бронзовых знака

по классике — кильнуть. узнайте его pid и пошлите ему kill , возможно, нужно послать «правильный сигнал» — тогда kill -9 , но процесс должен уметь правильно отработать этот сигнал.

30 ноя 2018 в 12:22
а как узнать его pid?
30 ноя 2018 в 12:24
в списке процессов.
30 ноя 2018 в 12:34

узнать список процессов можно в top/htop/atop, также запустив pgrep python3 или ps aux | grep python3 и потом глазками найти нужный процесс.

30 ноя 2018 в 14:03

Обычно, программисты в своем коде сохраняют свой pid специальный файл (например в /var/run или /tmp) и задача прибить процесс стает тривиальной.

Команды Linux: как работает nohup

При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.

Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP ( Signal Hang UP ). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.

Синтаксис команды nohup

Синтаксис команды выглядит следующим образом:

nohup command arguments

Давайте же посмотрим, как работает данная команда.

Проверка версии nohup

Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.

Запуск процесса с помощью Nohup

Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.

Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:

Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.

nohup ./hello.sh > output.txt

Чтобы просмотреть этот файл, введите:

Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2>&1 , как показано ниже.

nohup ./hello.sh > myoutput.txt >2&1

Запуск процесса в фоновом режиме

Чтобы запустить процесс в фоновом режиме, используйте символ & в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.

nohup ping google.com &

Чтобы проверить процесс при возобновлении работы оболочки, используйте команду pgrep, как показано ниже.

Если вы хотите остановить или убить запущенный процесс, используйте команду kill, за которой укажите идентификатор процесса, как показано ниже.

Заключение

Все процессы, запущенные с помощью команды nohup, будут игнорировать сигнал SIGHUP даже после выхода из оболочки.

Как только задание запущено с помощью команды nohup, стандартный ввод будет недоступен для пользователя.

По умолчанию nohup.out используется как стандартный файл для stdout и stderr.

Уточнение по утилите nohup

UNIX-утилита, запускающая указанную команду с игнорированием сигналов потери связи (SIGHUP). Таким образом, команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы.

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

Данная утилита пропишет указанный ей скрипт в автозагрузку, и после перезагрузки или при включении компьютера он (скрипт) будет запускаться после загрузки ОС?

Mischutka ★★★★★
15.07.21 18:10:32 MSK
vvn_black ★★★★★
( 15.07.21 18:18:35 MSK )
anonymous
( 15.07.21 18:18:38 MSK )

В переводе на современный это значит, что «когда закроешь эмулятор терминала».

Нет конечно. Имеется в виду сессия работы с терминалом.

no-such-file ★★★★★
( 15.07.21 18:20:36 MSK )

Нет. Обычно процесс в Unix прекращает работать, если прекратил работать его родительский процесс. То есть обычно когда пользователь выходит из системы, все процессы, что являются потомками его сессии, останавливаются. Но если их запустить с nohup, то на них это правило не действует. Естественно, это не имеет отношения к автозагрузке и при выключении такой независимый процесс все равно будет остановлен.

Vsevolod-linuxoid ★★★★★
( 15.07.21 18:22:28 MSK )

Наиболее типичный случай: ты заходишь в систему по ssh и запускаешь фоновый процесс через nohup, после чего выходишь и процесс продолжает работать, а не убивается SIGHUP’ом.

То же самое работает и с локальным входом через TTY, но этим редко пользуются

annulen ★★★★★
( 15.07.21 18:23:59 MSK )
Ответ на: комментарий от no-such-file 15.07.21 18:20:36 MSK

когда закроешь эмулятор терминала

Если закрывать эмулятор терминала, то перед этим надо еще disown процессу сделать. Хотя гораздо проще его не закрывать, он что, мешает кому-то

annulen ★★★★★
( 15.07.21 18:26:46 MSK )

Что значит «команда будет продолжать выполняться в фоновом режиме и после того, как пользователь выйдет из системы»?

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

Это похоже на то как обрабатывается Ctrl+C, когда процессу посылается сигнал TERM, который можно послать явно выполнив kill -SIGTERM .

Процесс на принятый сигнал сам решает что делать. Конечно когда ты собираешь helloworld то компиллер добавит дефолтные обработчики по стандарту. Но ничего не мешает сделать свой кастомный обработчик. Например сервисы/демоны на сигнал HUP просто обновляют свою конфигурацию, т.е. ты обновил конфиг и хочешь чтоб он применился без перезапуска процесса, то можешь послать ему сигнал: kill -SIGHUP (разумеется это работает если это было предусмотрено, для nginx работает).

Только KILL не дает выбор процессу, kill -9 или kill -SIGKILL ядро завершит процесс принудительно.

По всему выше написанному должно стать понятно что nohup просто не передает сигнал HUP дочернему процессу.

Aber ★★★★★
( 16.07.21 13:29:02 MSK )
Последнее исправление: Aber 16.07.21 13:53:53 MSK (всего исправлений: 1)

Ответ на: комментарий от no-such-file 15.07.21 18:20:36 MSK

Ясно. Только непонятно, почему в описании данной утилиты нельзя было так и сформулировать, а не использовать объяснение, допускающее неверное толкование?

Mischutka ★★★★★
( 18.07.21 07:08:47 MSK ) автор топика
Последнее исправление: Mischutka 18.07.21 07:17:58 MSK (всего исправлений: 2)

Ответ на: комментарий от Mischutka 18.07.21 07:08:47 MSK

Описание составлено в расчёте, что ты понимаешь как всё это устроено. Технически там всё верно написано. В частности про «после перезагрузки или при включении компьютера» там нет ни слова, это ты сам от непонимания нафантазировал.

Использование nohup в Linux для запуска скриптов в фоновом режиме

Все процессы, за исключением at, завершаются, когда вы выходите из системы (консоли). Если вы хотите, чтобы после вашего выхода из системы процесс в фоновом режиме продолжал выполняться, то вам необходимо использовать команду nohup.

Nohup (от «no hang up») — это утилита в Unix-подобных операционных системах, которая позволяет запускать команды или скрипты так, чтобы они продолжали работать, даже если сеанс терминала был завершен.

Как использовать Nohup?

Команда nohup имеет следующий синтаксис:

nohup command &

Предположим, вы хотите, чтобы команда grep осуществила поиск во всех файлах в вашем текущем каталоге строки «word» и перенаправила вывод в файл word.list, и затем, не ожидая завершения, вы хотите выйти из системы, то введите следующую строку:

nohup grep word * > word.list &

Вы можете завершить команду nohup с помощью команды kill, где PID — это идентификатор процесса, который можно найти с помощью команды ps:

kill PID

Как вывести на экран запущенный через nohup процесс:

tail -f nohup.out

Заключение

Nohup — это хороший инструмент для запуска процессов в фоновом режиме в Linux. Он позволяет вам запускать команды и скрипты так, чтобы они продолжали работать после того, как вы закрыли терминал. Однако, если вам нужно запустить несколько процессов или вы хотите иметь более полный контроль над ними, вы также можете обратить внимание на программу screen, которая предоставляет вам виртуальные консоли внутри вашего терминала, позволяя запускать и управлять несколькими сеансами одновременно. 4 варианта Запуска скрипта на Python в Linux в фоновом режиме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *