Изпълнявам процес nohup на сървъра. Когато се опитам да го убия, конзолата на Putty се затваря вместо това.
Ето как се опитвам да намеря идентификатора на процеса:
ps -ef |grep nohup
Това е командата за убиване
kill -9 1787 787
Когато използвате 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
(който идва от стандартния изход). Вижте I/O Redirection за повече подробности относно работата с I/O redirection с шела.
Ако командата изпраща изходни данни редовно, можете да проверявате изхода от време на време с 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 с PID на процеса nohup'разбира се)
И това е всичко!
Надявам се, че този отговор ще бъде полезен за някого Аз също съм много нов в bash и SSH, но намерих 95% от знанията, които ми трябват тук :)