이름에 문구가 포함된 프로세스를 어떻게 종료할 수 있나요?

이름에 문구가 포함된 프로세스를 어떻게 종료할 수 있나요?

myName설명에 포함된 프로세스를 종료해야 합니다 . 현재 나는하고 있습니다 :

ps -ax |grep myName
I see PID
kill -9 PID

PID를 입력하지 않고 하나의 명령으로 어떻게 동일한 작업을 수행할 수 있습니까?

답변1

myName종료하려는 프로세스/실행 파일의 이름 인 경우 다음을 사용할 수 있습니다.

pkill myName

pkill기본적으로 SIGTERM신호(신호 15)를 보냅니다. 또는 신호 9를 원하면 다음을 SIGKILL사용하십시오.

pkill -9 myName

myName프로세스 이름이 아니거나 예를 들어 다른 (긴) 명령에 대한 인수인 경우 pkill(또는 pgrep)이 예상대로 작동하지 않을 수 있습니다. 그래서 옵션을 사용해야 합니다 -f.

에서 man kill:

-f, --full
              The pattern is normally only matched against the  process  name.
              When -f is set, the full command line is used.
NOTES
The process name used for matching is limited to the 15 characters present
   in the output of /proc/pid/stat.  Use the -f option to match  against  the
   complete command line, /proc/pid/cmdline.

그래서:

pkill -f myName

또는

kill -9 $(pgrep -f myName)

답변2

명령 이름으로 다음을 사용하십시오.

pkill -9 myscript

명령줄에서 문자열을 찾는 경우:

kill -9 $(ps ax | grep myName | fgrep -v grep | awk '{ print $1 }')

경고해야 할 점은 위 명령은 SIGKILL둘 이상의 프로세스에 신호를 보낼 수 있다는 것입니다.

답변3

두 가지 매우 깔끔한 명령이 있으며 pgrep검색어 pkill또는 명령 이름의 일부를 입력할 수 있으며 프로세스의 PID를 제공하거나 (의 경우 pkill) 해당 프로세스를 종료합니다.

$ pgrep -f firefox                                                             
23699

pkill및 플래그를 사용하여 동일한 명령을 실행하면 -f모든 Firefox 창이 닫힙니다.

플래그 -f는 특히 프로세스의 전체 명령줄을 검색하는 데 필요합니다.

답변4

for loop다음과 같이 특정 프로세스 이름과 관련된 모든 PID에 대해 간단한 작업을 수행할 수 있습니다 .

$ for i in $( ps ax | awk '/[m]yName/ {print $1}' ); do kill ${i}; done

그러면 다음 단어가 포함된 모든 프로세스가 종료됩니다 myName.

관련 정보