강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của jdyj1448
jdyj1448

câu hỏi đã được viết

Khóa học nhân Linux dễ nhất tại Hàn Quốc

Tất cả thông tin về nhiệm vụ đều có ở đây!-2

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

Đã giải quyết

Viết

·

111

·

Đã chỉnh sửa

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 하위로 간 이유가 궁금하네요

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

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

 

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

감사합니다

clinuxRaspberry-Pi운영체제arm-architectureasmjava

Câu trả lời 3

0

jdyj님의 프로필 이미지
jdyj
Người đặt câu hỏi

답변 감사합니다!

0

ojtube5님의 프로필 이미지
ojtube5
Người chia sẻ kiến thức

  • 부모 프로세스가 종료되면, 그 자식은 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는 이 고아 프로세스를 추적하고 관리하여 잠재적인 메모리 누수나 기타 문제가 발생하지 않도록 합니다.

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

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

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

Hình ảnh hồ sơ của jdyj1448
jdyj1448

câu hỏi đã được viết

Đặt câu hỏi