Linux에서 캐스케이드를 종료하는 방법은 무엇입니까? [복사]

Linux에서 캐스케이드를 종료하는 방법은 무엇입니까? [복사]

프로세스 B를 생성하는 프로세스 A가 있고 프로세스 C를 생성한다고 가정해 보겠습니다. 어떤 상황에서 A를 죽이면 전체 체인(또는 내 생각에 트리)이 죽고, 언제 죽지 않습니까? 나는 때때로 이것이 사실이라는 것을 알았습니다. 때때로 B는 ppid 1로 끝나고 C는 영향을 받지 않습니다.

이 동작은 특정 Linux 커널 버전마다 다릅니까?

답변1

시스템 kill()호출과 kill쉘 명령을 사용하여 프로세스나 프로세스 그룹을 종료할 수 있습니다. 어느 쪽이든 "계단식"은 없습니다.

  • kill()시스템 호출이나 쉘 명령 kill으로 양의 정수가 제공 되면 이는 프로세스를 나타냅니다. 신호는 다른 프로세스가 아닌 이 프로세스로 전송됩니다.

  • kill()시스템 호출에 음의 정수가 주어지거나 쉘 명령에 로 시작하는 작업 식별자(예: 또는 )가 주어지면 신호 kill는 a의 모든 구성원에게 동시에 전송됩니다.%%1%2프로세스 그룹. 프로세스 그룹은 작업 제어 기능입니다. 대화형 셸 사용에서 각 셸 파이프(예: . sed s/foo/bar/ | cat -n | gzip)는 모두 동일한 프로세스 그룹의 일부인 하나 이상의 프로세스로 구성됩니다.

(시스템 호출에는 몇 가지 추가 사례가 있습니다: -1모든 프로세스에 보내기, 0자신에게 보내기).

이는 한 프로세스가 종료될 때 다른 프로세스가 다른 이유로 종료되지 않는다는 의미는 아닙니다. 예를 들어:

  • 자식을 생성한 프로세스는 종료 신호를 가로채서 자신을 정리하는 방법으로 종료하기 전에 생성한 자식 프로세스에 전달할 수 있습니다.
  • 셸 파이프라인(예: 위와 같은)의 이전 프로세스가 어떤 이유로든 종료되면 셸 파이프라인의 이후 프로세스도 더 이상 입력을 받지 않기 때문에 일반적으로 즉시 종료됩니다.

커널은 이러한 "추가" 결과에 대해 전혀 책임을 지지 않으며 관련 소프트웨어의 작동 방식에 따라 다릅니다.

관련 정보