본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

17. 프로세스 - 프로세스 ID

by devraphy 2021. 9. 15.

0. 시작하기전에 

- 프로그램, 프로세스, 스레드에 대해서 간략하게 복습해보자. 

 

▶ 프로그램

   - 바이너리, 코드이미지, 응용프로그램, application, 실행파일 등의 다양한 형태로 존재한다. 

 

▶ 프로세스

   - 현재 실행중인 프로그램으로, 메모리에 적재되어 있으며 프로세스 상태정보(PCB)를 사용하여 처리한다.

 

▶ 스레드 

   - 프로세스 내부에 나뉘어져 있는 세부 작업을 가리킨다. 

   - 리눅스 프로세스는 기본적으로 싱글스레드 형식을 가진다. 

   - 싱글스레드 프로세스: 기본 프로세스 

   - 멀티스레드 프로세스: 여러 스레드가 존재하는 프로세스 

 


1. 프로세스 ID

- 각 프로세스에 부여되는 프로세스 고유번호, PID

- PID의 최대값은 32768이다. (2의 15승)

- 부호형(signed) 16비트 정수값을 사용하여 표현한다.

 

a) 최대 PID를 확인하는 방법 

sudo vi /proc/sys/kernel/pid_max

- 위의 시스템파일을 조회해보면 다음과 같이 출력되는 것을 확인할 수 있다. 


2. 프로세스 계층

- 일반적으로 프로세스는 기존의 프로세스를 복사해서 새로운 프로세스를 생성한다. 

- 새로운 프로세스에는 다른 코드들이 덮어쓰기 되어 사용된다. 

- 복사의 대상이 되는 프로세스를 부모(parent)프로세스라고 지칭한다. 

- 복사되어 생성된 새로운 프로세스를 자식(child) 프로세스라고 지칭한다. 

- 프로세스는 이와 같은 방식으로 새로운 프로세스를 생성하며, 이로인해 프로세스 계층이 형성된다. 

 

- 최초의 프로세스는 운영체제에 의해 만들어지며, pid 1번을 부여받은 이 프로세스를 init 프로세스라고 한다. 

- 즉, init 프로세스는 모든 프로세스의 가장 상위 프로세스다. 

- 부모의 프로세스 번호를 ppid(parent pid)라고 지칭한다. 

 

 

a) ppid 확인하기 

ps -ef

# -e 옵션: 시스템상의 모든 프로세스에 대한 정보를 출력한다. 
# -f 옵션: 다음 목록을 출력한다(UID, PID, PPID, CPU%, STIME, TTY, TIME, CMD)


3. 프로세스와 소유자 관리

- 리눅스는 내부적으로 프로세스의 소유자(사용자, UID)와 그룹(GID)을 매핑시킨다. 

- 사용자에게 출력해서 보여줄 때, UID와 사용자 이름 매핑정보를 기반으로 사용자 이름으로 제공한다. 

 

a) 소유자와 소유자 이름 매핑정보 확인하기 

# 사용자의 비밀번호를 관리하는 파일, UID와 GID가 함께 매핑되어있다. 
sudo vi /etc/passwd

- vi 에디터의 /(슬래시) 기능을 이용하여 찾고싶은 문자열을 검색할 수 있다. 

- 위의 빨간색으로 밑줄친 부분이 비밀번호를 표시한 내용이다. 

- 그러나 비밀번호가 그대로 출력되는 것이 아니라, 다른 파일에 매핑되어 있다. 

 

- 위의 표는 passwd 파일을 통해서 설정할 수 있는 정보다. 

 

 

b) 비밀번호 매핑 파일 확인하기

# 사용자의 암호화된 비밀번호와 실제 비밀번호가 매핑되어있는 파일
sudo vi /etc/shadow

- 패스워드가 문자열 그대로 출력되는 것이 아니라, 위의 사진처럼 암호화 되어 표시된다. 

- 만약 패스워드가 존재하지 않는다면, 위의 사진에서 보이는바와 같이 *로 표시된다. 

댓글