동적 ID가 있는 프로세스는 종료되지 않습니다.

동적 ID가 있는 프로세스는 종료되지 않습니다.

다음과 같이 프로세스를 종료하려고 합니다.

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

그러면 아무런 처리도 하지 않습니다.

관련 정보