다음과 같이 프로세스를 종료하려고 합니다.
root@xxx:~# ps -ef | grep mosquitto
root 3083 1912 0 11:59 pts/0 00:00:00 grep --color=auto mosquitto
root@xxx:~# kill 3083
-bash: kill: (3083) - No such process
ps -ef | grep mosquitto
root 3175 1912 0 12:00 pts/0 00:00:00 grep --color=auto mosquitto
root@xxx:~# ps -ef | grep mosquitto | head -c 16 | tail -c 4
3255root@xxx:~# kill $(ps -ef | grep mosquitto | head -c 16 | tail -c 4)
-bash: kill: (3290) - No such process
root@xxx:~# pgrep mosquitto | xargs -i pstree -ps {}
root@xxx:~#
이 프로세스를 어떻게 종료할 수 있나요?
답변1
다른 대답은 정확하지만 세부 사항이 약간 부족합니다.
root@xxx:~# ps -ef | grep mosquitto
root 3083 1912 0 11:59 pts/0 00:00:00 grep --color=auto mosquitto
명령줄을 사용하면 하나의 프로세스만 반환됩니다 grep --color=auto mosquitto
. 이는 grep mosquitto
명령줄에서 가져온 것이며 출력을 필터링하는 데 사용됩니다 ps
. 쉘에는 별명이 있을 가능성이 높습니다 grep=grep --color=auto
.
다음 쉘 프롬프트를 수신하자마자 grep
이전 명령이 종료되었으므로 해당 pid를 가진 프로세스를 종료할 필요가 없습니다. 동일한 명령을 다시 실행하면 grep
새로운 프로세스가 생성되고 해당 프로세스의 PID는 이전 프로세스와 다릅니다 grep
.
일정에 따라 프로세스 grep
가 출력에 나타날 수도 있고 나타나지 않을 수도 있습니다. 그러나 출력을 grep할 때마다 프로세스가 출력에 존재할 수 ps
있다고 가정해야 합니다 . grep
이 작업을 수동으로 수행하는 경우 이 결과를 무시하십시오. 스크립트에 필요한 경우 이를 방지할 수 있는 몇 가지 기술이 있습니다.
ps | grep mosquitto | grep -v grep
-를 포함하는 모든 grep
줄을 무시하십시오.
ps | grep '[m]osquitto'
이는 추가 프로세스를 생성하지 않습니다. [m]
letter 만 포함하는 문자 클래스이므로 m
예상 패턴과 일치하지만 매개 변수와는 일치하지 않기 때문에 작동합니다 grep
.
검색하는 내용에 따라 이 pgrep
명령이 유용할 수도 있습니다.
답변2
귀하의 프로세스가 존재하지 않습니다. 다음을 수행하십시오.
ps ax |grep mosquitto|grep -v grep
그러면 아무런 처리도 하지 않습니다.