파이프 연산자를 사용하는 것이 왜 작동하지 않습니까? [복사]

파이프 연산자를 사용하는 것이 왜 작동하지 않습니까? [복사]

내가 일반적으로 사용하는 것은 pidof프로세스의 pid를 가져와서 KILL -SIGTERM <pid>죽이는 것입니다.

파이프는 한 명령의 출력을 다른 명령의 입력으로 사용한다고 가정됩니다.

그렇다면 다음 명령이 작동하지 않는 이유는 무엇입니까?

pidof firefox | kill -SIGTERM

답변1

파이프는 한 명령의 출력을 다른 명령의 입력으로 사용한다고 가정됩니다.

이는 정확하지만 kill표준 입력의 어떤 입력도 허용하지 않습니다. 대신 명령줄 인수로 제공해야 합니다.

kill -SIGTERM "$(pidof firefox)"

또는:

pidof firefox | xargs kill

$(이는 쉘 내부의 명령 확장 xargs이지만 외부입니다.

그러나 이러한 방법에는 pid가 여러 개 있거나 pid가 없는 경우 수행할 작업과 같은 극단적인 경우가 많습니다. 이것이 pkill이 존재하는 이유입니다.

pkill -TERM firefox

답변2

실행하는 것이 더 좋습니다:

 kill $(pidof firefox)

또는

pkill firefox

답변3

다양성을 위해: 달리는 것은 어떻습니까:

kill -SIGTERM "$(pgrep -f firefox)"

대소 문자를 구분하지 않는지 확실하지 않습니다.

kill -SIGTERM "$(pgrep -fi FirEfox)"

여러 프로세스가 동일한 이름으로 실행 중이고 첫 번째 프로세스를 종료하려고 합니다.

kill -SIGTERM "$(pgrep -f firefox | head -1)"

나에 관한 정보pgrep

$ pgrep -V
pgrep (proctools 0.4pre1) http://proctools.sourceforge.net

관련 정보