SIGTERM
을 프로세스 그룹에 전송하여 프로세스 그룹을 종료하려고합니다. 이것은 kill
명령을 통해 수행하지만, 내가 찾은 매뉴얼이 어떻게 작동하는지 정확히에 대한 몇 가지 세부 사항 제공 할 수 있습니다프로세스 goup의 프로세스가 신호를 수신하는 순서에 대해 걱정해야합니까?
int kill(pid_t pid, int sig);
...
If pid is less than -1, then sig is sent to every process in
the process group whose ID is -pid.
그러나, 어떤 순서로 신호가 그룹을 형성하는 프로세스로 전송됩니다? 다음 상황을 상상해보십시오 : 파이프가 그룹의 마스터 프로세스와 종속 프로세스 사이에 설정됩니다. kill(-pid)
처리 중에 슬레이브가 종료 된 경우에도 마스터는 여전히 마스터가 아닌 경우 마스터가이를 내부 오류로보고 할 수 있습니다 (자식이 사망했다는 알림을 받으면). 그러나, 나는 모든 프로세스가 그러한 종료가 그들의 프로세스 그룹 외부의 어떤 것으로 인해 야기되었다는 것을 이해하기를 원한다.
어떻게 이런 혼란을 피할 수 있습니까? 내가 단순한 것보다 더해야 할 일 kill(-pid,SIGTERM)
? 또는 OS에 대한 기본 속성에 의해 해결되었는데, 그 중 일부는 내가 알지 못하는 것입니까?
그룹의 프로세스 코드를 수정할 수 없습니다.
그래,이 솔루션은 내가 현재 구현 한 것입니다. 나는 시스템에서'SIGTERM' 핸들러가 실제로'SIGCONT' 때문에 프로세스가 깨어날 때까지 호출되지 않았 음을 확인했다. 나의 실험은 또한 모든 적절한'SIGCHLD' 신호가 제어 과정에 전달된다는 것을 보여줍니다 : 우리가 신호를 보내는 자식의 중지, 다시 시작 및 종료시. –
'ps' 출력을 체크하거나'/ proc//stat'을 체크하여 프로세스 상태를 확인합니다. 매뉴얼 상태대로 'ps'출력의 'T'에 의해 멈춤 상태를 나타냅니다. –
mvds