Как получить идентификатор процесса, чтобы убить процесс 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
это работает в 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}