파이프를 통해 죽이는 인수를 제공하는 방법


85

특정 프로세스를 검색하고 해당 프로세스를 종료해야합니다. 다음과 같은 명령을 작성했습니다.

ps -e | grep dmn | awk '{print $1}' | kill

프로세스 이름은 dmn. 그러나 작동하지 않습니다. 이름과 프로세스를 어떻게 찾을 수 있습니까 kill?

답변:


162
kill $(ps -e | grep dmn | awk '{print $1}')

8
최신 $()구문을 사용하십시오 kill $(ps -e | grep dmn | awk '{print $1}')..
Stratus3D

7
다른 사람들을 위해 fwiw, 나는 그것이 작동하도록하기 위해이 대답을 수정 kill $(ps -efw | grep dmn | grep -v grep | awk '{print $2}')해야했습니다. 왜 그런지 잘 모르겠고 충분히 신경 쓰지 마십시오.
joshweir

1
@joshweir kill패턴을 찾으려고하는 'grep'프로세스도 죽이려고 했기 때문 입니다
meain

\n에서처럼 awk마다 필요하지 awk '{print $1"\n"}'않습니까?
Sopalajo de Arrierez

43

제거하려는 프로세스가 여러 개인 경우 다음을 사용할 수 있습니다.

ps -efw | grep dmn | grep -v grep | awk '{print $2}' | xargs kill

참고 : 출력에서 ​​grep 프로세스 자체를 제거해야하므로 grep -v grep사용됩니다.


17
다음과 같이 대괄호 안에 첫 번째 문자를 넣어 grep이 grep에 나타나지 않도록 할 수 있습니다. grep [d] mn
Oldskool

1
@Oldskool 좋은 속임수. 메타 문자를 사용하여 grep 정규식이 자신과 일치하지 않도록 만드는 것은 좋은 생각입니다.
jcollado

@Oldskool, +1, 당신은 천재입니다!
jcr 2013-08-26

좋은 속임수이지만 쉘 스크립트로 바꾸는 것이 더 복잡해집니다
Metagrapher

17

당신은 사용할 수 있습니다

pkill dmn 

시스템에 pkill 명령 이있는 경우 .


1
killall 대신 pkill에 +1. 그것은 "의미"다른없이 여러 플랫폼에서 사용할 수 ( killall는 Solaris에서이 동일합니다 killall5 파일 - 즉, 죽일 예를 들어 리눅스에서 모든 프로세스)
plundra

4

다른 사람을 추가하는 것 뿐이지 만 awk의 정규식 기능 용량을 사용하는 것을 좋아합니다.

kill $(ps | awk '/dmn/{print $1}')

4

pidof시스템에 명령 이있는 경우 (내가 잘못하지 않는 한 ZSH와 같은 쉘이 기본적으로 제공된다는 것을 알고 있습니다), 다음과 같이 할 수 있습니다.

kill -9 $(pidof dmn)


2

명령이 있고 이미지 이름을 알고 pipe있다면이 작업이 필요하지 않을 수도 있습니다 pidof.

kill $(pidof synergyc)

$()본질적으로 파이프처럼 사용할 수있는 변수로 출력을 변환하므로 이것을 이해합니다. 다른 옵션보다 짧고 이해하기 쉽지만 유연성이 떨어지고 직접적 일 수도 있습니다.


0
for procid in $(ps -aux | grep "some search" | awk '{print $2}'); do kill -9 $procid; done

안녕 친구 .. 우리는 for 루프를 사용하여 할 수 있습니다.

"일부 검색"은 여기에서 검색하려는 모든 프로세스 이름입니다. 예를 들어 "java"이므로 Java 프로세스 수가 200+이므로 하나씩 죽이는 것은 너무 일반적입니다.

위의 명령을 사용할 수 있습니다.

감사.


0

pgrep-f 옵션과 함께 사용하십시오 . kill $(pgrep -f dmn)


4
당신이 가지고 있다면 pgrep, 왜 안돼 pkill -f dmn?
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.