bash 작업을 그룹으로 제어하시겠습니까?

bash 작업을 그룹으로 제어하시겠습니까?

특정 세션 내에서 작업 그룹을 제어할 수 있는 방법이 있습니까 bash?

이상적으로는 다음과 같이 말하고 싶습니다.

$ prog1 &   
$ GROUP=FOO prog2 &
$ GROUP=FOO prog3 &
$ GROUP=BAR prog4 &

그런 다음 종료 kill %FOO만 하고 prog2prog3.

답변1

특정 bash 세션 내에서 작업 그룹을 제어할 수 있는 방법이 있습니까?

네, 있어요! - 배열을 사용하여 그룹을 형성하고 이를 사용하여 각 프로세스 ID를 캡처하여 $!배열에 추가합니다.

$!POSIX에서 지정한 특수 매개변수, 가장 최근의 백그라운드 명령의 10진수 프로세스 ID를 제공합니다.

다음은 Bash의 배열에 추가하고 질문의 맥락에서 열거하는 방법에 대한 튜토리얼입니다.

먼저 배열을 선언합니다.

$ GROUP_FOO=()
$ GROUP_BAR=()

그룹에 속하지 않은 작업:

$ prog1 &

FOO 그룹에 들어갈 작업(표기법은 +=값이 배열에 추가되어야 함을 나타냅니다):

$ prog2 &
$ GROUP_FOO+=($!)

FOO 그룹에 들어갈 또 다른 직업:

$ prog3 &
$ GROUP_FOO+=($!)

BAR 그룹에 들어갈 직업:

$ prog4 &
$ GROUP_BAR+=($!)

FOO 그룹 프로세스를 종료하려면:

$ for id in ${GROUP_FOO[@]}; do kill $id; done

스크립트 버전

이를 스크립팅하는 경우 성공적으로 시작된 경우에만 프로세스 ID가 배열에 추가되도록 약간 수정합니다.

prog2 & sleep 0.1; kill -0 $! && GROUP_FOO+=($!)

이렇게 하면 오류로 인해 즉시 종료되어 실행되지 않는 배열에 프로세스 ID가 있을 가능성이 줄어듭니다. 0.1초의 절전 지연(아마도 0.01초일 수도 있음)은 오류 코드와 함께 종료되는 프로세스 시간을 제공합니다.

관련 정보