프로세스 그룹이 무엇인가요? 누군가가 이미 질문하고 답변한 적이 있나요?여기:
프로세스 그룹은 동시에 신호를 내보낼 수 있는 관련 프로세스의 모음입니다.
불행하게도 "즉시 신호를 보낼 수 있는 일련의 관련 프로세스"를 언제 어떻게 시작해야 하는지에 대한 실제 사례는 없습니다.
여기 누구든지 프로세스 그룹을 시작하고 를 사용하여 그 안에 있는 모든 프로세스를 종료하는 코드 예제를 줄 수 있습니까 kill -- -0
?
예를 들어, Apache 웹 서버와 해당 하위 프로세스는 프로세스 그룹이 되며, 기본 프로세스가 종료되면 프로세스 그룹 내의 나머지 PID도 종료됩니까?
답변1
실제 세계에는 많은 예가 있습니다. some_app
연결된 질문에서 ls
더 cat
복잡한 예가 있을 수 있습니다.
$ 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
새 프로세스 그룹( )을 시작했음을 나타냅니다 . 그들이 방황하지 않는다는 사실이 아니라면 신호를 받을 수 있으므로 어떤 형태의 차단이 필요할 것입니다.14131
14131
14132
sleep
$ 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도 공유합니다.