![Linux에서 캐스케이드를 종료하는 방법은 무엇입니까? [복사]](https://linux55.com/image/59124/Linux%EC%97%90%EC%84%9C%20%EC%BA%90%EC%8A%A4%EC%BC%80%EC%9D%B4%EB%93%9C%EB%A5%BC%20%EC%A2%85%EB%A3%8C%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%EB%B3%B5%EC%82%AC%5D.png)
프로세스 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
자신에게 보내기).
이는 한 프로세스가 종료될 때 다른 프로세스가 다른 이유로 종료되지 않는다는 의미는 아닙니다. 예를 들어:
- 자식을 생성한 프로세스는 종료 신호를 가로채서 자신을 정리하는 방법으로 종료하기 전에 생성한 자식 프로세스에 전달할 수 있습니다.
- 셸 파이프라인(예: 위와 같은)의 이전 프로세스가 어떤 이유로든 종료되면 셸 파이프라인의 이후 프로세스도 더 이상 입력을 받지 않기 때문에 일반적으로 즉시 종료됩니다.
커널은 이러한 "추가" 결과에 대해 전혀 책임을 지지 않으며 관련 소프트웨어의 작동 방식에 따라 다릅니다.