Как получить идентификатор процесса, чтобы убить процесс nohup?

Я запускаю nohup-процесс на сервере. Когда я пытаюсь убить его, вместо этого закрывается консоль для шпал.

вот как я пытаюсь найти идентификатор процесса:

ps -ef |grep nohup 

это команда убить

 kill -9 1787 787

Ответ 1

При использовании nohup и вы ставите задачу в фоновом режиме, оператор фона (&) предоставит вам PID в командной строке. Если ваш план заключается в ручном управлении процессом, вы можете сохранить этот ПИД и использовать его позже, чтобы убить процесс, если необходимо, через kill PID или kill -9 PID (если вам нужно принудительно убить). Кроме того, вы можете найти PID позже ps -ef | grep "command name" и найти PID оттуда. Обратите внимание, что nohup ключевое слово/сама команда не отображается в выводе ps для данной команды.

Если вы использовали script, вы могли бы сделать что-то вроде:

nohup my_command > my.log 2>&1 &
echo $! > save_pid.txt

Это запустит my_command сохранение всего вывода в my.log (в script, $! представляет PID последнего выполненного процесса). 2 является файловым дескриптором стандартной ошибки (stderr) и 2>&1 указывает оболочке направить стандартный вывод ошибки на стандартный вывод (файловый дескриптор 1). Для этого требуется &1, так что оболочка знает это файловый дескриптор в этом контексте, а не только файл с именем 1. 2>&1 необходим для записи любых сообщений об ошибках, которые обычно записываются в стандартную ошибку в наш my.log файл (который поступает из стандартного вывода). Подробнее см. В разделе Перенаправление ввода/вывода для обработки перенаправления ввода-вывода с помощью оболочки.

Если команда отправляет вывод на регулярной основе, вы можете иногда проверять вывод с помощью tail my.log, или если вы хотите следовать ему "вживую", вы можете использовать tail -f my.log. Наконец, если вам нужно убить процесс, вы можете сделать это через:

kill -9 `cat save_pid.txt`
rm save_pid.txt

Ответ 2

Я использую red hat linux на сервере VPS (и через SSH-putty), для меня работало следующее:

Сначала вы перечислите все запущенные процессы:

ps -ef

Затем в первом столбце вы найдете свое имя пользователя; Я нашел это три раза:

  • Один из них - это соединение SSH.
  • Второе - это FTP-соединение.
  • Последним был процесс nohup

Затем во втором столбце вы можете найти PID процесса nohup и введите только:

kill PID 

(заменяя PID с помощью идентификатора процесса nohup),

И это все!

Я надеюсь, что этот ответ будет полезен для кого-то, я тоже очень новичок в bash и SSH, но нашел 95% знаний, которые мне нужны здесь:)

Ответ 3

Предположим, что я запускаю ruby ​​ script в фоновом режиме с помощью команды

nohup ruby script.rb &

то я могу получить pid вышеупомянутого фонового процесса, указав имя команды. В моем случае команда - ruby.

ps -ef | grep ruby

Выход

ubuntu   25938 25742  0 05:16 pts/0    00:00:00 ruby test.rb

Теперь вы можете легко убить процесс, используя команду kill

kill 25938

Ответ 4

jobs -l должен дать вам pid для списка процессов nohup. убить (-9) их мягко. ;)

Ответ 5

Вы можете попробовать

kill -9 `pgrep [command name]`

Ответ 6

Это работает в Ubuntu

Введите это, чтобы узнать PID

ps aux | grep java

Будет показан весь запущенный процесс в отношении java

В моем случае

johnjoe      3315  9.1  4.0 1465240 335728 ?      Sl   09:42   3:19 java -jar batch.jar

Теперь убей его kill -9 3315

Процесс зомби окончательно прекратился.

Ответ 7

Я запустил сервер django со следующей командой.

nohup manage.py runserver <localhost:port>

Это работает на CentOS:

:~ ns$netstat -ntlp
:~ ns$kill -9 PID 

Ответ 8

Предположим, что вы выполняете Java-программу с nohup, которую вы можете получить с помощью

'ps aux | grep java'

выход

xxxxx     9643  0.0  0.0  14232   968 pts/2   

тогда вы можете убить процесс, набрав

sudo kill 9643

или скажем, что вам нужно убить все процессы Java, а затем просто использовать

sudo killall java

эта команда убивает все процессоры Java. Вы можете использовать это с процессом. просто дайте имя процесса в конце команды

sudo killall {processName}

Ответ 9

когда вы создаете задание в nohup, оно сообщит вам идентификатор процесса!

nohup sh test.sh &

вывод покажет вам идентификатор процесса, как

25013

Вы можете убить его тогда:

kill 25013

Ответ 10

Сегодня я встретил ту же проблему. И так как это было давно, я полностью забыл, какую команду я использовал и когда. Я попробовал три метода:

  1. Использование STIME, показанного в ps -ef. Это показывает время, когда вы запускаете ваш процесс, и очень вероятно, что вы не выполняете команду непосредственно перед закрытием ssh (зависит от вас). К сожалению, я не думаю, что последняя команда - это команда, которую я запускаю с использованием nohup, поэтому она не работает для меня.
  2. Второй - это PPID, также показанный в ps -ef. Это означает Parent Process ID, идентификатор процесса, который создает процесс. Ppid равен 1 в Ubuntu для процесса, который использует nohup для запуска. Затем вы можете использовать ps --ppid "1" чтобы получить список, и проверить ВРЕМЯ (общее время ЦП, используемое вашим процессом) или CMD, чтобы найти PID процесса.
  3. Используйте lsof -i:port если процесс занимает несколько портов, и вы получите команду. Тогда, как и в ответе выше, используйте ps -ef | grep command ps -ef | grep command и вы получите PID.

Как только вы найдете PID процесса, вы можете использовать kill pid для завершения процесса.