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

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

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

ps -ef |grep nohup 

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

 kill -9 1787 787

8 ответов


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

если вы используете сценарий, вы могли бы сделать что-то вроде:

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

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

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

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

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

во-первых, вы перечисляете все запущенные процессы:

ps -ef

затем в первом столбце вы найдете свое имя пользователя, я нашел следующие три раза:

  • одним из них было SSH-соединение
  • вторым было FTP-соединение
  • последним был процесс nohup

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

kill PID 

(замена PID на PID процесса nohup, конечно)

и это все!

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


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

nohup ruby script.rb &

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

ps -ef | grep ruby

выход

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

теперь вы можете легко убить процесс с помощью команды kill

kill 25938

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


можно попробовать

kill -9 `pgrep [command name]`

это работает в 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

процесс зомби, наконец, остановился.


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

nohup manage.py runserver <localhost:port>

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

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

Предположим, вы выполняете программу java с nohup, вы можете получить идентификатор процесса java по

`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}