해결된 질문
작성
·
351
3
답변 감사합니다
여기서 답변을 보고 추가적으로 궁금한 점이 생겼습니다
"그럼 이렇게 init 프로세스를 복사해 터미널이나 그에 필요한 프로세스가 생성되는데
보통 사용자가 실행하는 프로그램은 서로 자식-부모 관계를 가지지 않기 때문에 걱정하시는 것처럼
LOL.exe 프로세스를 종료해도 웹브라우저가 종료하는 일은 발생하지 않습니다!"
라고 답변을 주셨는데요
그렇다면 사용자가 실행하는 프로그램들은 부모 프로세스 없이 독립적으로 프로세스가 생성되는 것인가요?
아니면 그려주신 트리 모양에 적힌 기본적인 프로세스(?)들이 부모 프로세스가 되어서 자식 프로세스로 생성되는 것인가요?
즉 유닉스 OS에서는 모든 프로세스들이 부모 - 자식간의 관계를 가지면서 프로세스들이 생성되는 것인지 궁금합니다
웹브라우저와 LOL.exe가 서로 부모-자식 관계가 아니더라도
그렇다면 컴퓨터 부팅이후 최초로 웹브라우저를 실행했다고 가정했을시 웹브라우저는 어떤 프로세스(기본 프로세스가 되었든 임의의 프로세스가 되었든)의 자식 프로세스로써 생성이 되는건지
아니면 사용자가 실행하는 프로그램이므로 독립적인 프로세스로 생성되는 것인지가 궁금합니다.
두번째 질문으로
앞으로 해주시는 운영체제 대한 설명은 전부 유닉스 OS에만 적용되는 설명인 것인가요
아니면 윈도우 OS나 유닉스 OS나 공통적인 것이지만 일부 차이점이 있는 경우가 있는 것인가요
세번째 질문,
윈도우의 경우 보내주신 링크에서
"독립적으로 실행 되는 새 프로세스를 만듭니다. 그러나 편의상 관계를 부모-자식 관계 라고 합니다." 라는 설명으로
보아 부모 프로세스가 먼저 종료되더라도 자식 프로세스가 좀비 프로세스가 될 것 같지 않은데(서로 독립적인 프로세스 이므로)
제 생각이 맞나요?
답변 1
3
맞습니다.
모든 프로세스는 부모 프로세스를 가지고 있습니다.
윈도우는 부모 프로세스를 복사하지는 않지만 완전 새로운 프로세스를 만들고 부모 프로세스를 가집니다.
사용자가 만든 프로세스의 부모프로세스가 0번 프로세스가 아니더라도 그 부모의 부모, 혹은 그 부모의 부모의 부모, 이렇게 조상 프로세스를 살펴보면 최종적으로는 0번 프로세스가 나오게 됩니다!
정리하자면 0번 프로세스를 제외한 모든 프로세스(부팅시 자동으로 생성되는 프로세스, 사용자 프로세스)는 부모 프로세스를 가지고 있습니다.
앞으로 설명은 유닉스/리눅스 OS 기준으로 설명합니다.(예시 코드는 전부 유닉스/리눅스 기준입니다.)
하지만 윈도우 OS도 비슷한 부분이 상당히 많습니다.
내부적으로 사용하는 알고리즘이 조금 다르거나 변경해서 쓰이는 것도 있고
똑같은 알고리즘을 쓰더라도 변수가 조금씩 다를 수 있습니다(ex. 타임슬라이스의 크기)
독립적으로 실행되는 새 프로세스도 모두 부모를 가지고 있습니다.
하지만 부모프로세스와 통신을 하지 않으면 사용자 입장에서는 독립적으로 실행되는 것 처럼 보일 수 있습니다!
이 사진은 Process Explorer 프로그램으로 프로세스의 관계를 자세히 살펴본건데요.
wininit 프로세스가 보이는데 이건 유닉스에서 init 프로세스와 동일하다고 보시면됩니다.
wininit 프로세스의 자식으로 services 프로세스가 있고 그 밑으로 자식이 생성돼서 사용자 프로세스가 생성된 것을 볼 수 있습니다.
사용자가 만든 독립적으로 보이는 프로세스(실제로 부모가 있는)의 부모 프로세스는 거의 데몬으로 실행되고 있기 때문에 사용자가 직접 종료할 일이 거의 없습니다.
그래서 좀비프로세스가 많이 생성되고 그런일은 없습니다!
만약에 자주 생성됐다 종료되는 사용자 프로세스를 부모 프로세스를 가지게 설계했다면 조금만 사용하면 컴퓨터가 느려지니 사용자에겐 최악의 운영체제가 되었을 것 같네요 ㅎㅎ
답변 감사합니다! 이해가 되었습니다.