이름으로 프로세스(및 하위 프로세스)를 닫으려고 했습니다(둘 다 이 사이트에서 가져와서 적용했습니다).
read -p "Set process name: " PS
# first option
f() { ps ax | grep "$1" | grep -v grep | awk '{print $1}' | xargs kill -9; }
f $PS
# second option
for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done
# end of bash
if [ $? -gt 0 ]; then
echo "no process:" $PS
else
echo "Finished"
fi
하지만 둘 중 어느 것이 더 효율적인지는 모르겠습니다(또는 위의 어느 것도 아님).
또한 두 번째 루프는 완료되지 않지만(즉, 프로세스가 없으면 "no process:" 프로세스 이름으로 종료되어야 함) 바로 "Finished"로 이동합니다.
kill
두 경우 모두 명령 문제 가 있습니다 . 프로세스가 없으면 kill 사용 옵션을 나타내는 메시지가 나타납니다. &> /dev/null
or로 숨길 수 있지만 출력을 침묵시키는 플래그(스위치)가 있는지는 set +m, set -m
알 수 없습니다.kill
고쳐 쓰다:
@steeldriver 덕분에 awk가 변수(/$PS/)를 허용하지 않음 오류를 볼 수 있어서 이 솔루션을 찾았습니다.여기:
이것을 교체하십시오 :
for pid in $(ps -ef | awk '/$PS/ {print $2}'); do kill -9 $pid; done
이것으로:
for pid in $(ps -ef | grep "$PS" | awk '{print $2}'); do kill -9 $pid; done