![파이프 연산자를 사용하는 것이 왜 작동하지 않습니까? [복사]](https://linux55.com/image/165573/%ED%8C%8C%EC%9D%B4%ED%94%84%20%EC%97%B0%EC%82%B0%EC%9E%90%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%99%9C%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
내가 일반적으로 사용하는 것은 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