사용자 소유 프로세스 이외의 프로세스를 종료하기 위한 쉘 스크립트

사용자 소유 프로세스 이외의 프로세스를 종료하기 위한 쉘 스크립트

프로세스를 종료하지만 루트가 소유한 경우 오류 메시지를 반환하는 스크립트를 만드는 데 도움을 찾고 있습니다. 저는 이 분야의 완전한 초보자라는 점을 말씀드리고 시작하고 싶습니다. 현재 나는 ps -aef | grep $1 | grep -v grep | awk '{print $2}'프로세스 이름을 인수로 사용하여 잘 작동하는 kill을 가지고 있습니다. 그러나 소유자가 루트인 경우 프로세스가 종료되는 것을 막기 위해 if 문으로 작동하도록 할 수는 없습니다.

답변1

pgrep -u 0 "$1" && echo "Can't kill process: Owned by root" || killall "$1"

(루트)가 소유한 프로세스 pgrep -u 0만 검색 됩니다 . UID 0프로세스가 발견되지 않은 경우(따라서 존재하지 않거나 루트로 실행되고 있지 않은 경우), prgep는 0이 아닌 반환 코드를 반환하고 killall명령이 실행됩니다. prgrep이 0 반환 코드를 반환하면 echo는 실행되지만 killall 명령은 실행되지 않습니다.

답변2

노력하다

ps -aef | grep $1 | egrep -v grep | awk '$1 != "root" {print $2}'

이 문은 $1 != "root"루트가 소유한 프로세스를 필터링합니다. 데몬 프로세스에서 여전히 오류가 발생할 수 있습니다(예: www-dataApache를 실행 중인 경우).

관련 정보