27.08.2015 Views

리눅스 시스템 프로그래밍-미리보기

커널과 C 라이브러리로 풀어가는(개정2판) 로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월 35,000원

커널과 C 라이브러리로 풀어가는(개정2판)
로버트 러브 저/김영근 역 | 한빛미디어 | 2015년 01월
35,000원

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

프로세스의 계층 구조<br />

각각의 프로세스는 pid(프로세스 ID)라고 하는 고유한 양수 값으로 구분된다. 첫 번째 프로세<br />

스의 pid는 1이며 그 뒤로 생성되는 프로세스는 새로운 pid를 받는다.<br />

<strong>리눅스</strong>에서 프로세스는 프로세스 트리라는 엄격한 계층 구조를 형성한다. 일반적으로 프로<br />

세스 트리는 init 프로그램으로 알려진 첫 번째 프로세스가 루트가 된다. 새로운 프로세스는<br />

fork() <strong>시스템</strong> 콜로 만들어진다. 이 <strong>시스템</strong> 콜은 호출하는 프로세스를 복사해서 다른 프로세<br />

스를 새로 만든다. 원본 프로세스를 부모라고 하며 새로 만든 프로세스를 자식이라고 한다. 첫<br />

번째 프로세스를 제외한 나머지 모든 프로세스에는 부모가 있다. 부모 프로세스가 자식 프로세<br />

스보다 먼저 종료되면 커널은 고아가 된 자식 프로세스를 init 프로세스에 입양시킨다.<br />

프로세스가 종료되면 <strong>시스템</strong>에서 바로 제거되지 않고 프로세스 일부를 메모리에 계속 유지해<br />

서 자식 프로세스가 종료될 때 부모 프로세스가 상태를 검사할 수 있도록 한다. 이를 ‘종료된<br />

프로세스를 기다린다’고 표현한다. 부모 프로세스가 종료된 자식 프로세스를 기다렸다면 자식<br />

프로세스는 완전히 종료된다. 그런데 프로세스가 종료되었는데 기다리는 부모 프로세스가 없<br />

다면 이때, 좀비가 탄생한다. 일상적으로 init 프로세스는 자기에게 딸린 자식 모두를 기다려서<br />

새로 입양된 프로세스가 영원히 좀비로 남지 않도록 보살핀다.<br />

1.4.3 사용자와 그룹<br />

<strong>리눅스</strong>에서 권한은 사용자와 그룹 형태로 제공된다. uid(사용자 ID)는 고유한 양수 값이며 사<br />

용자를 구분한다. 따라서 프로세스마다 자신을 실행하는 사용자가 누구인지 파악하는 용도로<br />

uid가 하나 붙으며 이를 프로세스의 실제 uid라고 한다. uid는 <strong>리눅스</strong> 커널 내부에서 사용자<br />

를 나타내는 유일한 개념이다. 하지만 다행히 사용자는 자신과 다른 사용자를 숫자가 아닌 사<br />

용자 이름으로 참조한다. 사용자 이름에 대응하는 uid는 /etc/passwd 파일에 저장되어 있으<br />

며 라이브러리 루틴은 사용자 이름에 대응하는 uid로 맵핑된다.<br />

로그인 과정에서 사용자는 이름과 암호를 login 프로그램에 전달한다. 사용자가 입력한 이름<br />

과 암호가 올바르면 login 프로그램은 /etc/passwd에 지정되어 있는 사용자 로그인 셸을 실<br />

행해서 셸의 uid를 사용자 uid로 바꾼다. 자식 프로세스는 부모 프로세스의 uid를 상속받는다.<br />

uid 0은 root(루트)라는 특수한 사용자를 가리킨다. root 사용자는 특별한 권한이 있으며 시<br />

52 <strong>리눅스</strong> <strong>시스템</strong> <strong>프로그래밍</strong>

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!