2011-12-01 5 views
2

프로세스를 죽이는 쉘 스크립트를 구현해야합니다. 문제는 프로세스가 실행 중인지 확인할 수있는 조건부를 수행해야한다는 것입니다. 프로세스를 죽이는 쉘 스크립트

내 코드이지만, 그것은 작동하지 않습니다 : 당신이 사용할 수있는 프로세스가 맥 OS X에서 실행중인 경우

line 3: [: missing `]' 
+2

오류는'''앞에 공백이 필요하다는 것을 알려주고 있습니다. (하지만'-x'는 프로세스가 실행 중인지 여부를 알려주지 않으므로 여전히 문제를 해결하지 못합니다). –

답변

2

확인하기 :

#!/bin/sh 

if [ -x "MY_PROCCESS_NAME"]; then 
    killall MY_PROCCESS_NAME 
else 
    echo "Doesn't exist" 
fi 

오류입니다

pid=$(ps -fe | grep 'process name' | grep -v grep | awk '{print $2}') 

쉘 스크립트의 수를 줄이려면 프로세스 이름의 문자 중 하나를 묶을 수 있습니다 대괄호 :

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}') 

이의 모습 테스트 결합 :

pid=$(ps -fe | grep '[p]rocess name' | awk '{print $2}') 
if [[ -n $pid ]]; then 
    kill $pid 
else 
    echo "Does not exist" 
fi 

그것은 당신이 일반적으로 'pgrep을'명령을 가지고 리눅스에서해야 할 것보다 조금 더 복잡, 그것은 'ps -fe | grep ... | grep -v grep '

+1

어쨌든'awk'을 사용하려면 grep - awk/skp rocess_name/{print $ 1} ' –

+0

답변을 고맙습니다. 코드를 실행할 때 프로세스가 실행중인 경우에도 항상 "존재하지 않음"메시지가 표시됩니다. – Ana

+0

패턴 일치와 같은 사운드가 프로세스를 찾지 못합니다. "ps -fe | grep '[p] rocess name'"이 프로세스와 일치하는 줄을 제공하는지 확인하십시오. 예를 들어 WindowServer를 찾고 있다면 "ps -fe | grep '[W] indowServer ' " – Petesh

0

OSX에서 작동하는지 확실하지 않으면 우분투에서 작동합니다.

ps aux | awk '$11~/vim/ {PID = $2} END {if (PID) print "kill -9 "PID; else print "echo no process"}' | bash

무슨 문자열이 발견되지 않는 경우가이 경우, 정력에, 프로세스를 발견하고 kill -9 pid를 반환하는 일은이 echo no process 그 다음 파이프 출력을 반환

하지만 하나 라이너로

배쉬로.

관련 문제