2017-01-03 1 views
2

while 루프에서 lsof가 제공하는 모든 프로세스를 종료하려고합니다.while 루프에서 kill이 작동하지 않습니다.

이 잘 작동 :

lsof -i tcp | grep -v iceweasel | awk '{ print $2 }' | while read -r line 
do 
    echo "$line" 

done; 

이 하나하지 않습니다 :이 마지막 반면에 의해 생성

lsof -i tcp | grep -v iceweasel | awk '{ print $2 }' | while read -r line 
    do 
     kill "$line" 

    done; 

오류는 다음과 같습니다

./kill.all.sh: line 6: kill: PID: arguments must be process or job IDs 

어떤 생각? 감사.

+0

"작동하지 않음"이란 무엇을 의미합니까? 'kill '은 프로세스에 SIGTERM을 보내고 프로세스는이 시그널로 원하는 것을 할 수있다 (무시할 수도있다). 확실히 프로세스를 종료하려면, SIGKILL :'kill -9 $ pid' 또는'kill -KILL $ pid'를 보내주십시오. –

+0

죄송합니다, 오류 메시지를 잊어 버렸습니다 : – achille

+0

./kill.all.sh : 줄 6 : kill : PID : 인수는 프로세스 또는 작업 ID이어야합니다. – achille

답변

2

문제는 lsof -i tcp의 출력 따라서 오류를 일으키는 헤더를 포함하고 PID 항목이 결국 kill 명령 (kill PID)에 전달되는 것입니다 : iceweasel 제외하고 TCP를 사용하는 모든 프로세스를 종료하십시오.

하나에 머리가없는 출력 -t 옵션을 사용하여 또는 AWK 첫 번째 행을 무시 : NR 레코드 (행) 수있다

awk 'NR > 1 { print $2 }' 

.

SIGTERM 신호 만 프로세스에 보내고 프로세스는 무시할 수 있습니다. 프로세스를 확실히 종료하려면 (-KILL) 옵션을 사용하여 kill을 실행하십시오 (신호 코드는 man 7 signal 참조).

1

바퀴를 재발 명하지 마십시오.

kill $(lsof -c ^iceweasel -a -i tcp -t) 
+0

과용!:-D 구문이 작동하지 않지만 lsof -c^icewease -i tcp -t | kill {}은 잘 수행합니다. – achille

+0

lsof -c^icewease -i tcp -t | xargs -i kill {} – achille

관련 문제