특정 상위 프로세스에서 실행 중인 모든 하위 프로세스를 종료할 수 있어야 합니다. 이 작업을 수행하는 데 더 좋은 옵션은 무엇입니까? PPID 또는 PGID를 사용하시겠습니까?
이 같은:
pkill -term-P
PPID를 사용하면 아이가 죽게 됩니다. 하지만 PGID에 대한 몇 가지 내용을 읽었으며 어느 것이 다른 것보다 더 효과적인지 알고 싶습니다.
답변1
상위 프로세스를 종료해도 상위 프로세스가 신호를 포착하여 다시 전송하지 않는 한 하위 프로세스는 종료되지 않습니다.
TERM으로 프로세스 그룹을 종료하면 프로세스 그룹의 모든 구성원에게 TERM 신호가 전송되므로 이것이 갈 길이지만 상위 프로세스가 프로세스 그룹을 시작했는지(또는 상위 프로세스의 상위가 프로세스 그룹을 시작했는지 확인해야 합니다. 그렇게 하지 않는 경우) 부모의 부모가 살아 있는 경우 TERM 신호를 받을 수 있는지 여부는 상관하지 않습니다.
쉘을 사용하여 상위 프로세스(또는 상위 프로세스의 상위 프로세스)를 시작하는 경우 쉘의 각 명령 호출이 프로세스 그룹을 시작하므로 이에 대해 걱정할 필요가 없습니다.
(부모 프로세스가 종료되면 커널이 자식 프로세스에 신호를 보내도록 지시하는 데 사용할 수 있는 Linux 관련 기능이 있지만 내가 아는 한 표준 Unix에서는 이런 일이 발생하지 않습니다. 확인해 보세요.prctl(2)더 알고 싶으시면 DEATHSIG를 검색해 보세요.