Killall은 때때로 실패합니다.

Killall은 때때로 실패합니다.

안녕하세요, 아래는 "processName" 프로세스의 모든 인스턴스를 종료하도록 설계된 스크립트이지만 때로는 프로세스를 종료하지 못하고 동일한 프로세스의 두 인스턴스가 표시되는 경우 이러한 일이 발생하지 않도록 하는 방법입니다.

  #!/bin/sh


    pidof processName
    if [ $? -eq 0 ]
    then
       killall processName
       # give processName time to quit
       sleep 3

       pidof processName
       if [ $? -eq 0 ]
       then
          killall -9 processName
       fi
    fi

exit 0

답변1

명령줄과 프로세스 이름에 따라 달라질 수 있습니다. 사람들은 종종 두 가지를 혼동하고 프로그램이 표시되어야 한다고 생각하는 콘텐츠를 표시하지 않거나 제거하지 않는 이유를 궁금해합니다. 또한 이름을 변경하는 프로세스나 프로세스를 교체하면 추적이 어려워질 수도 있습니다.

귀하의 프로그램에 PID 파일이 없다고 가정합니다. 일부 사람들은 두 가지 프로세스(예: 다른 구성 파일을 사용하여 테스트 및 개발)를 실행하기를 원할 수 있으므로 이는 실제로 프로세스를 추적하는 가장 좋은 방법입니다. 또한 접근 방식에서는 프로세스 이름이 프로젝트에 고유하다고 가정합니다.

원하는 작업에는 프로세스 이름만 제공하고 pidof에 대해 걱정할 필요가 없기 때문에 pkill이 더 적합할 것입니다. pidof의 문제점은 일치하는 프로세스가 여러 개 있고 단일 정수가 필요한 경우 스크립트가 손상될 수 있다는 것입니다. 또한 pkill을 사용하는 경우 논리가 동일하므로 pgrep을 사용하십시오.

그것은 다음과 같습니다:

#!/bin/sh

pkill processName
pgrep processName
if [ $? -eq 0 ]
then
  sleep 3
  pkill -9 processName
fi

답변2

이름으로 프로세스를 종료해야 한다면 pkill이 또 다른 대체 명령이 될 것입니다.

pkill "프로세스 이름"

관련 정보