Я запускаю nohup-процесс на сервере. Когда я пытаюсь убить его, вместо этого закрывается консоль для шпал.
вот как я пытаюсь найти идентификатор процесса:
ps -ef |grep nohup
это команда убить
kill -9 1787 787
Я запускаю nohup-процесс на сервере. Когда я пытаюсь убить его, вместо этого закрывается консоль для шпал.
вот как я пытаюсь найти идентификатор процесса:
ps -ef |grep nohup
это команда убить
kill -9 1787 787
При использовании 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
Я использую red hat linux на сервере VPS (и через SSH-putty), для меня работало следующее:
Сначала вы перечислите все запущенные процессы:
ps -ef
Затем в первом столбце вы найдете свое имя пользователя; Я нашел это три раза:
Затем во втором столбце вы можете найти PID процесса nohup и введите только:
kill PID
(заменяя PID с помощью идентификатора процесса nohup),
И это все!
Я надеюсь, что этот ответ будет полезен для кого-то, я тоже очень новичок в bash и SSH, но нашел 95% знаний, которые мне нужны здесь:)
Предположим, что я запускаю 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
jobs -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, которую вы можете получить с помощью
'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}
когда вы создаете задание в nohup, оно сообщит вам идентификатор процесса!
nohup sh test.sh &
вывод покажет вам идентификатор процесса, как
25013
Вы можете убить его тогда:
kill 25013
Сегодня я встретил ту же проблему. И так как это было давно, я полностью забыл, какую команду я использовал и когда. Я попробовал три метода:
ps -ef
. Это показывает время, когда вы запускаете ваш процесс, и очень вероятно, что вы не выполняете команду непосредственно перед закрытием ssh (зависит от вас). К сожалению, я не думаю, что последняя команда - это команда, которую я запускаю с использованием nohup, поэтому она не работает для меня.ps -ef
. Это означает Parent Process ID, идентификатор процесса, который создает процесс. Ppid равен 1 в Ubuntu для процесса, который использует nohup для запуска. Затем вы можете использовать ps --ppid "1"
чтобы получить список, и проверить ВРЕМЯ (общее время ЦП, используемое вашим процессом) или CMD, чтобы найти PID процесса.lsof -i:port
если процесс занимает несколько портов, и вы получите команду. Тогда, как и в ответе выше, используйте ps -ef | grep command
ps -ef | grep command
и вы получите PID. Как только вы найдете PID процесса, вы можете использовать kill pid
для завершения процесса.