bash 스크립트에서 명령 실행을 시작합니다(단순화를 위해 매개변수는 생략됨)
avconv | sox | nc
같은 상자에서 약 150개의 명령을 동시에 시작하겠습니다.
마지막 nc
명령은 스트림을 다른 호스트로 보냅니다. 그 숙주가 죽으면 nc
죽은 것이지만 avconv
아직 sox
살아있습니다. 내가 killall sox
이런 상황에 처해 있을 때 avconv
나는 아직 살아 있다.
하나쯤은 있어야 하지 않겠습니까 sigpipe
?
bash 스크립트를 수동으로 실행하고 nc
종료하면 다른 두 프로세스도 종료됩니다. 그러나 그러한 스크립트를 많이 시작할 때는 그렇지 않습니다.
sigpipe
파이프 버퍼가 가득 차거나 시스템이 높은 경합 상태에 있을 때 이것이 작동하지 않을 가능성이 있습니까? 이 문제를 어떻게 해결할 수 있나요?
답변1
다음은 nc가 끝나면 프로세스 그룹을 종료합니다.
#!/bin/sh
avconv x y z | sox a b c | { nc somewhere port ; pkill -g 0 ; }
시작하는 방법에 따라 그룹에 있는 항목을 제한하기 위해 setid와 같은 유틸리티를 사용해야 할 수도 있습니다. nc가 완료된 후 쉘에서 pkill 명령을 실행하여 이를 수행할 -g 0
수도 있습니다 .-P $$
당신은 또한 볼 수 있습니다모든 하위 프로세스 종료