현재 sh 스크립트 파일에서 다음과 같은 줄을 사용합니다.
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
그러나 프로세스 ( myServer
here)가 실행중인 경우에만 호출하는 방법이 궁금합니다 .
현재 sh 스크립트 파일에서 다음과 같은 줄을 사용합니다.
kill `ps aux | grep -F 'myServer' | grep -v -F 'grep' | awk '{ print $2 }'`
그러나 프로세스 ( myServer
here)가 실행중인 경우에만 호출하는 방법이 궁금합니다 .
답변:
나는 보통 pgrep과 pkill을 사용합니다.
if pgrep myServer; then pkill myServer; fi
pkill myServer
나 killall -q myServer
? 존재하지 않는 프로세스를 종료하려는 시도에는 단점이 없습니다.
|| true
그런 다음 추가하십시오 .
if ! killall -q myServer; then echo ERROR; fi
?
사용해보십시오 :
sudo kill `pidof process_name`
여기서 process_name은 종료하려는 프로세스의 이름입니다. 이것에 대한 좋은 점은 pidof가 주어진 이름과 일치하는 모든 프로세스의 pid를 나열한다는 것입니다. kill은 여러 pid를 허용하므로 단일 변덕으로 모든 pid를 죽입니다.
이것이 도움이되는지 알려주십시오.
kill `pidof process_name
. 빈 목록을 반환하면 kill 호출을 건너 뜁니다.
R & D로 만든 작은 스크립트. 나는 당신이 그것을 좋아 바랍니다
#!/bin/bash
echo " Enter the process name:"
read $proc_name
if pgrep $proc_name
then
echo " $proc_name running "
pkill $proc_name
echo "$proc_name got killed"
else
echo " $proc_name is not running/stopped "
fi
script.sh와 같은 이름으로 저장 한 다음
chmod +x script.sh
./script.sh
그런 다음 프로세스 이름을 지정하십시오.
참고 : 나는 이것과 그것으로 잘 여러 번 시도했다.
로 프로세스가 존재하는지 확인하십시오 pidof
. 그렇다면 죽이십시오.
(! pidof process_name) || sudo kill -9 $(pidof process_name)
위의 명령을 실행 한 후 종료 코드는 항상 0입니다.
kill
테스트와 호출 사이에 경쟁 조건이 있기 때문에 프로세스가 실행 중일 때만 호출 할 수 없습니다kill
(짧은 시간에 다른 이유로 프로세스가 중지되었을 수 있음). 당신은 사용해야pkill
하거나killall
정확하게 수행하려고 것과 동일한 작업을 수행하는 미만으로 입력 (그리고 아마도 몇 가지 다른 장점도).