Linux 프로세스 그룹 예

Linux 프로세스 그룹 예

프로세스 그룹이 무엇인가요? 누군가가 이미 질문하고 답변한 적이 있나요?여기:

프로세스 그룹은 동시에 신호를 내보낼 수 있는 관련 프로세스의 모음입니다.

불행하게도 "즉시 신호를 보낼 수 있는 일련의 관련 프로세스"를 언제 어떻게 시작해야 하는지에 대한 실제 사례는 없습니다.

여기 누구든지 프로세스 그룹을 시작하고 를 사용하여 그 안에 있는 모든 프로세스를 종료하는 코드 예제를 줄 수 있습니까 kill -- -0?

예를 들어, Apache 웹 서버와 해당 하위 프로세스는 프로세스 그룹이 되며, 기본 프로세스가 종료되면 프로세스 그룹 내의 나머지 PID도 종료됩니까?

답변1

실제 세계에는 많은 예가 있습니다. some_app연결된 질문에서 lscat복잡한 예가 있을 수 있습니다.

$ ps axo ppid,pid,pgid,command | grep $$
41613  2926  2926 mksh -l
 2926 14131 14131 ps axo ppid,pid,pgid,command
 2926 14132 14131 grep 2926
$ 

이는 쉘( ) 이 구성원이 및 인 mksh새 프로세스 그룹( )을 시작했음을 나타냅니다 . 그들이 방황하지 않는다는 사실이 아니라면 신호를 받을 수 있으므로 어떤 형태의 차단이 필요할 것입니다.141311413114132sleep

$ perl -e 'warn $$; sleep 999' | perl -ne 'sleep 999'
14148 at -e line 1.

그런 다음 다른 곳으로 달려가 kill -- -14148그룹을 죽일 수 있습니다.

답변2

예:

$ ( sleep 100 & sleep 100 & sleep 100 & )
$ ps -Ao pid,pgid,command | grep sleep
19734 19733 sleep 100
19735 19733 sleep 100
19736 19733 sleep 100
19789 19788 grep sleep

()시작된 모든 프로세스의 프로세스 그룹 리더가 될 새 하위 쉘(적어도 Bash에서)을 생성합니다(IOW: 쉘은 PID가 세 가지 절전 모드의 PGID가 될 새 하위 쉘을 생성하고 백그라운드에서 비동기식으로 실행됩니다. ).

잠을 없애려면 를 입력하면 됩니다 kill -19733.

다른 예시:

$ cat script1.sh 
sleep 100 &
./script2.sh

$ cat script2.sh 
sleep 100 &

$ ./script1.sh 
$ ps -Ao pid,pgid,command | grep sleep
21605 21604 sleep 100
21607 21604 sleep 100
21618 21617 grep sleep

아니면 sleep 10 | sleep 20 | sleep 30 | sleep 40 &동일한 PGID도 공유합니다.

관련 정보