서버에서 nohup 프로세스를 실행 중입니다. 그것을 죽이려고하면 퍼티 콘솔이 대신 닫힙니다.
이것이 프로세스 ID를 찾는 방법입니다.
ps -ef |grep nohup
이것은 죽이는 명령입니다
kill -9 1787 787
서버에서 nohup 프로세스를 실행 중입니다. 그것을 죽이려고하면 퍼티 콘솔이 대신 닫힙니다.
이것이 프로세스 ID를 찾는 방법입니다.
ps -ef |grep nohup
이것은 죽이는 명령입니다
kill -9 1787 787
답변:
사용하는 경우 nohup
당신은 백그라운드에서 작업을 넣어, 배경 연산자 ( &
) 프롬프트 명령에 당신에게 PID를 제공 할 것입니다. 계획이 프로세스를 수동으로 관리하려는 경우 PID를 저장하고 나중에 PID를 저장하여 필요할 경우 kill PID
또는 kill -9 PID
강제로 강제 종료해야하는 경우 프로세스 를 강제 종료 할 수 있습니다. 또는 나중에 ps -ef | grep "command name"
PID를 찾아 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 리디렉션 처리에 대한 자세한 내용 은 I / O 리디렉션 을 참조하십시오.
명령이 정기적으로 출력을 보내면을 사용하여 가끔 출력을 확인 tail my.log
하거나 "실시간"을 따라 가려면을 사용할 수 있습니다 tail -f my.log
. 마지막으로 프로세스를 종료해야하는 경우 다음을 통해 수행 할 수 있습니다.
kill -9 `cat save_pid.txt`
rm save_pid.txt
nohup
이 마지막이다, 그 자체가 인쇄합니다 PID &
예를 들어, 어떤 배경을 ls &
실행하기위한 PID를 보여줄 것ls
2
는 "표준 오류"파일 설명자입니다. >
쉘 리디렉션이고 &1
"표준 출력"파일 디스크립터입니다 ( &
여기서 쉘은 내가라는 파일을 참조한다고 생각하지 않습니다 1
). 따라서 2 > &1
표준 오류 출력을 표준 입력으로 리디렉션합니다. 이전의 > my.log
방법은 표준 출력을로 리디렉션하는 수단 이므로 my.log
오류 메시지도 전달할 수있는 방법이 필요합니다 my.log
. 2 > &1
이러한 오류가 표준 출력으로 이동하고이 결과가로 이동합니다 my.log
. I / O 리디렉션을 참조하십시오 .
echo $!
나에게 대신 프로세스의 nohup을의 PID를 양산 제공 : paste.fedoraproject.org/428697/99695314
&
는 명령 구분 기호 역할을하므로 시도 할 수 sh -c "nohup my_command > my.log 2>&1 & echo $! > save_pid.txt"
있습니다. 작동하지만 시도하지 않았습니다.
VPS 서버 (및 SSH-putty를 통해)에서 Red Hat Linux를 사용하고 있습니다.
먼저 실행중인 모든 프로세스를 나열합니다.
ps -ef
그런 다음 첫 번째 열에 사용자 이름이 있습니다. 나는 그것을 다음 세 번 발견했다.
그런 다음 두 번째 열에서 nohup 프로세스의 PID를 찾을 수 있으며 다음을 입력하십시오.
kill PID
(물론 nohup 프로세스의 PID로 PID를 대체합니다)
그리고 그게 다야!
이 답변이 bash 및 SSH를 처음 접하는 사람에게 유용하지만 여기에서 필요한 지식의 95 %를 찾았습니다. :)
아래 명령으로 백그라운드에서 루비 스크립트를 실행한다고 가정하십시오.
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
ps -ef
그리고 kill
둘 다 위에서 잘 다루어졌습니다. 그래서 새로운 부분은 무엇입니까?
jobs -l 은 nohup 프로세스 목록에 대한 pid를 제공해야합니다. 그들을 부드럽게 (-9) 죽이십시오. ;)
kill -9
규칙적인 신호가 작동하지 않는다는 것을 알지 않는 한하지 마십시오.
nohup으로 Java 프로그램을 실행한다고 가정하면 Java 프로세스 ID를 얻을 수 있습니다.
`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}
오늘 나는 같은 문제를 만났다. 그리고 오래 전부터 어떤 명령을 언제 사용했는지 완전히 잊었습니다. 세 가지 방법을 시도했습니다.
ps -ef
명령에 표시된 STIME 사용 이것은 프로세스를 시작한 시간을 보여 주며 ssh를 닫기 직전에 명령을 내릴 가능성이 큽니다. 불행히도 최신 명령이 nohup을 사용하여 실행하는 명령이라고 생각하지 않으므로 이것이 작동하지 않습니다.ps -ef
명령 에도 표시됩니다 . 프로세스를 작성하는 프로세스의 ID 인 상위 프로세스 ID를 의미합니다. nohup을 사용하여 실행하는 프로세스의 우분투에서 ppid는 1입니다. 그런 다음 사용할 수 있습니다ps --ppid "1"
목록을 가져 와서 TIME (프로세스 사용 총 CPU 시간) 또는 CMD를 확인하여 프로세스의 PID를 찾을 수 있습니다.lsof -i:port
프로세스가 일부 포트를 사용하는 경우 사용 하면 명령이 표시됩니다. 그런 다음 위의 답변과 같이 사용 ps -ef | grep command
하면 PID를 얻을 수 있습니다.프로세스의 PID를 찾으면 프로세스를 종료하는 kill pid
데 사용할 수 있습니다 .
nohup
나중에 사용할 때 PID를 저장kill
하거나ps -ef
출력 에서 명령 이름으로 프로세스를 찾아 PID를 가져와야합니다. 이 아닌 명령 이름을 찾아야합니다nohup
.