Я запускаю 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 для завершения процесса.