Inflearn brand logo image

인프런 커뮤니티 질문&답변

jdyj님의 프로필 이미지
jdyj

작성한 질문수

한국에서 제일 쉬운 리눅스 커널 강의

태스크의 모든 정보는 여기에 있다!-2

고아(?) 프로세스의 부모 선정이 어떻게 되는지 궁금합니다

해결된 질문

작성

·

61

·

수정됨

0

안녕하세요

java 프로세스를 생성하니 생각대로 sshd로 접속한 프로세스 하위로 java 프로세스가 생성되는걸 볼 수 있었습니다.

    996     996     996 ?        00:04:20   sshd
 279106  279106  279106 ?        00:00:00     sshd-session
 279140  279106  279106 ?        00:00:00       sshd-session
 279141  279141  279141 pts/0    00:00:00         bash
 279253  279253  279141 pts/0    00:00:37           java

여기서 java 프로세스를 백그라운드로 실행한 상태였는데 접속한 sshd 프로세스를 끊어버리니 systemd 하위로 간 것을 볼 수 있었습니다.

      1       1       1 ?        00:01:25 systemd
    996     996     996 ?        00:04:20   sshd
 279309  279309  279309 ?        00:00:00     sshd-session
 279343  279309  279309 ?        00:00:00       sshd-session
 279344  279344  279344 pts/0    00:00:00         bash
 279362  279362  279344 pts/0    00:00:00           ps
 279253  279253  279141 ?        00:00:37   java

여기서 java 프로세스의 부모가 sshd 하위가 아니라 systemd 하위로 간 이유가 궁금하네요

좀 더 정확히는 부모가 결정되는게 어떤 기준으로 결정되는지 궁금합니다

부모가 죽었으면 그 바로 위 부모가 새로운 부모가 되는 것인지요..?

 

시간이 날 때마다 보고있습니다

감사합니다

답변 3

0

jdyj님의 프로필 이미지
jdyj
질문자

답변 감사합니다!

0

ojtube5님의 프로필 이미지
ojtube5
지식공유자

  • 부모 프로세스가 종료되면, 그 자식은 systemd(PID 1)의 자식이 됨 (자동)

  • 바로 위 상위 부모가 되는 게 아니라, 항상 init/systemd가 부모가 됨

  • 이건 리눅스 커널의 프로세스 고아 관리 메커니즘에 따른 것
    (java 자체가 리눅스 커널에서 동작하기 때문에 그래요.)

0

안녕하세요, 인프런 AI 인턴입니다. jdyj님.

Java 프로세스가 sshd로 시작했다가 systemd 아래로 이동하는 현상에 대해 궁금하신 것 같습니다. 리눅스에서 프로세스의 부모가 어떻게 결정되는지에 대해 설명드리겠습니다.

  1. 프로세스 생성: 적절히 작동하는 시스템에서 모든 프로세스는 특정 부모 프로세스를 가집니다. 여러분이 본 것처럼 Java 프로세스는 처음에 sshd 하위에서 생성되었고, 이는 해당 SSH 연결을 통해 실행했기 때문입니다.

  2. 부모 프로세스의 종료: 만약 부모 프로세스가 종료되면, 리눅스는 고아가 된 자식 프로세스를 처리하기 위해 특별한 메커니즘을 사용합니다. 일반적으로 이러한 고아 프로세스의 새로운 부모가 init 프로세스가 되며, Modern Linux에서는 systemd가 이 역할을 대신합니다. 이는 systemd가 프로세스 ID 1을 가지며 모든 고아 프로세스의 부모가 되도록 디자인된 이유입니다.

  3. 고아 프로세스를 인수하는 이유: 이는 메모리 관리를 효율적으로 하고 시스템 상태를 안정적으로 유지하기 위함입니다. systemd는 이 고아 프로세스를 추적하고 관리하여 잠재적인 메모리 누수나 기타 문제가 발생하지 않도록 합니다.

추가로 관련 사항을 더 깊이 이해하고 싶으시다면, 리눅스의 프로세스 관리와 관련된 내용을 다룬 강의를 참고해보시는 것도 좋은 방법입니다.

유사한 질문과 답변을 참고하실 수 있도록 이전 게시물을 추천드립니다:
- 리눅스 시스템에서 프로세스의 부모 변경에 대해

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

jdyj님의 프로필 이미지
jdyj

작성한 질문수

질문하기