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 последнего выполненного процесса). Элемент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затем в первом столбце вы найдете свое имя пользователя, я нашел следующие три раза:
- одним из них было соединение SSH
- второй был FTP-соединение
- последним был процесс nohup
затем во втором столбце вы можете найти PID процесса nohup, и вы только набираете:
kill PID(замена PID на PID процесса nohup, конечно)
и это все!
Я надеюсь, что этот ответ будет полезен для кого-то я очень новой для bash и SSH, но на 95% знаний, которые мне нужны здесь :)
предположим, что я запускаю скрипт ruby в фоновом режиме с помощью команды ниже
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введите это, чтобы узнать
PIDps 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 server с помощью следующей команды.
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}
Comments