자동으로 프로세스 종료

자동으로 프로세스 종료

일부 프로세스를 제외하고 특정 셸의 모든 프로세스를 종료해야 합니다.

예를 들어 sh이것은 내 쉘과 명령입니다.

이것이 내 현재 쉘에 있는 것입니다.

rcihp146 :/home/msingh2> ps
   PID TTY       TIME COMMAND
  8880 pts/258   0:00 ps
  5908 pts/258   0:00 sh

하지만 추가 프로세스가 있으면 위의 두 프로세스를 제외하고 모두 종료하고 싶습니다.

나는 성공하지 못한 채 이 목적을 위해 한 줄짜리 시도를 시도했습니다.

rcihp146 :/home/msingh2> ps | awk '{system("kill -9 $1")}'
sh: kill: The number of parameters specified is not correct.
sh: kill: The number of parameters specified is not correct.
sh: kill: The number of parameters specified is not correct.
sh: kill: The number of parameters specified is not correct.

...하지만 다음과 같이 특정 PID를 제공하면 작동합니다.

 rcihp146 :/home/msingh2> ps | awk '{system("kill -9 23456")}'

ps2~3개의 프로세스(예 : , sh)가 종료되지 않도록 제외해야 합니다 .

이를 수행할 수 있는 방법이 있습니까?

답변1

물론 $1이 따옴표로 묶여 있기 때문에 작성한 줄은 작동하지 않습니다. 이 시도:

ps| gawk '{ if ($4 != "COMMAND" && $4 != "sh" && $4 != "ps") system("kill -KILL "$1) }'

재미있게 즐기되 주의해서 사용하세요. 나는 일반적으로 gawk의 시스템 명령을 좋아하지 않으며 "kill" 명령도 확실히 좋아하지 않습니다.

답변2

출력을 구문 분석하지 말고 ps원하는 대로 사용자 정의하세요.

ps필터링 옵션이 종료하려는 프로세스의 정확한 집합을 표시하기에 충분한 경우 -o pid=머리글 행이 아닌 PID 열만 표시하도록 지정하십시오.

ps … -o pid=
 1234
56789

출력에는 숫자와 공백만 포함되므로 명령 대체에 직접 사용할 수 있습니다.

kill $(ps … -o pid=)

추가 처리가 필요한 경우 -o원하는 열과 순서를 선택하세요. 지원되는 열 이름은 ps시스템 설명서를 참조하세요.POSIX몇 가지를 지정하십시오. =헤더 행을 억제하려면 각 열 뒤에 추가하세요 .

kill $(p=$(sh -c 'echo $PPID');
       ps -o pid= -o ppid= -o tty= -o comm= |
       awk -v "tty=${TTY#/dev/}" -v o=$$ -v p=$p '
           $1 != o && $1 != p && $2 != p && $3 == tty && $4 != "sh" {print $1}
       ')

답변3

이러한 작업을 자주 수행해야 하는 경우 proctools를 설치하십시오.

pkill -v -KILL ps

ps를 제외한 모든 것을 죽여라.

관련 정보