매우 복잡한 통계 모델을 실행하려고 하는데 모델 시간이 오래 걸릴 것으로 예상되어 nohup
프로세스를 실행하곤 했습니다. 하지만 프로세스를 과소평가했고 완료하는 데 약 260일 이상이 소요될 예정이어서 프로세스를 취소하고 싶었습니다.
Get PID를 사용해 보았고 ps aux |grep nohup
다음과 같은 결과를 얻었습니다.
\<username> 4920 0.0 0.0 14224 972 pts/15 S+ 01:53 0:00 grep nohup
제가 사용해보니 kill -9 14224
아무런 과정이 없다고 하더군요. 그래서 ps -ef | grep beast-2
제가 입력한 명령어를 다 기억하지 못해서 그걸 사용했어요 . 다음을 꺼내세요:
144039 1 0 Jul22 pts/12 00:00:00 /bin/sh /opt/anaconda3/bin/beast-2 -seed 777 -working -overwrite -instances 3 -threads 3 -beagle_SSE /home/<username>/XML/ST736_MTBD1.xml
다시 사용해서 확인해 보았 kill -9 144039
으나 여전히 새 PID로 프로세스가 실행되고 있습니다.
어떡해?
답변1
grep nohup
말했듯이 프로세스 14224는 ps
. 따라서 프롬프트를 받으면 grep
종료되므로 kill
그러한 프로세스가 없다고 보고하는 것이 논리적입니다.
nohup
출력에는 호출 프로세스가 표시되지 않습니다 ps
.
그렇다면 죽이는 과정을 어떻게 찾나요?
저는 당신 것이 없기 때문에 beast-2
시연용으로 사용하겠습니다 nohup sleep 99 &
.
ps -ef | grep sleep
이것이 나에게 줄 것이다
ljm 1491988 1336776 0 16:43 pts/0 00:00:00 sleep 999
ljm 1492021 1492069 0 16:45 pts/0 00:00:00 grep sleep
1492021은 다시 내 것이므로 grep
여기서는 중요하지 않습니다. 1491988은 내 기분이 좋지 않습니다 sleep
. 상위 PID는 1336776입니다. 그래서 그것을 확인하면 나에게
$ ps -f 1336776
UID PID PPID C STIME TTY STAT TIME CMD
ljm 1336776 1336769 0 Jul22 pts/0 Ss+ 0:00 /bin/bash
이것은 bash
. 예를 들어 다음을 사용하여 더 위로 올라갈 수 있습니다 pstree
.
$ pstree -ap 1336769
konsole,1336769
└─bash,1336776
└─sleep,1492051 999
따라서 부모를 죽이면 더 이상 새로운 부모가 생성되지 않습니다 beast-2
. 여기 내가 할게
kill 1336769
console 과 sleep 을 종료 bash
하지만 nohupped sleep은 종료하지 않습니다.
$ ps -ef | grep sleep
ljm 1492051 1 0 16:48 ? 00:00:00 sleep 999
ljm 1492285 1492069 0 16:57 pts/1 00:00:00 grep sleep
이제 상위 프로세스가 1
init 프로세스가 되었습니다. 지금 잠을 죽이면
$ kill 1492051
$ ps -ef | grep sleep
ljm 1492329 1492069 0 16:59 pts/1 00:00:00 grep sleep
그런 다음 모든 것이 사라졌습니다.
답변2
제 경우에는 laravel을 보호하기 위해 nohup을 사용합니다. 또한 포트에 바인딩된 프로세스를 종료해야 했습니다.
fuser 8080/tcp
거기에서 발견된 PID를 사용 하고(포트를 자신의 포트로 변경) 종료하십시오.