프로세스 ID

프로그램 : 바이너리, 코드 이미지, 응용프로그램, Application, 또는 실행 파일
프로세스 : 실행 중인 프로그램(메모리 적재 + 프로세스 상태 정보(PCB) 포함)
스레드
- 리눅스 프로세스는 기본 스레드 포함
- 싱글 스레드 프로세스 : 기본 프로세스
- 멀티 스레드 프로세스 : 여러 스레드 존재
프로세스 ID
프로세스 ID 는 pid 라고 얘기한다.
1) 각 프로세스는 해당 시점에 unique한 pid를 가짐
2) pid 최대값은 32768
3) 부호형(signed) 16비트 정수 값 사용

최근 할당된 pid 가 200 이라면 그 이후는 201, 202 식으로 할당 : 1씩 증가하면서 할당
만약 pid값이 max 값인 32768을 넘어가게 되면 맨 처음으로 넘어가서 1부터 시작하여 아직 사용하고 있지 않은 pid값을 할당. 여기서 중요한 건 프로세스 id값은 unique해야된다는 것이다.
프로세스 계층
1. 최초 프로세스: init프로세스, pid1
2. init프로세스는 운영체제가 생성
→ 운영체제가 처음에 부팅하면 최초로 프로세스를 하나 띄어준다.
→ 그 프로세스가 init프로세스이고 pid값은 1을 가지게 된다.
→ 프로세스는 컴퓨터 종료할까지 실행이 된 상태로 있는다. 딱히 하는 일은 없음
→ 그 이후 만들어지는 프로세스는 init프로세스 복사해서 프로세스를 만든다.
3. 다른 프로세스는 또다른 프로세스로부터 생성(부모 프로세스, 자식 프로세스)
4. ppid값이 부모 프로세스의 pid를 뜻함. 프로세스는 부모 프로세스 정보도 가지고 있음, 그 값을 ppid 에 저장.

→ 다른 프로세스는 반드시 독단적 생성 x
다른 프로세스 공간 카피해서 해당 공간에 실행 이미지를 덮어씌우는 형태로 만드는 것이 일반적

→ 자식 프로세스가 또 다른 자식 프로세스를 만들 수 있음
실습
ppid값 확인해보기

프로세스와 소유자(owner) 관리
1. 리눅스 내부에서는 프로세스의 소유자(사용자)와 그룹을 UID/GID (정수)로 관리
2. 사용자에게 보여줄 때에만 UID와 사용자 이름 매핑정보를 기반으로 사용자 이름으로 제공
파일:inode
프로세스:pid
소유자 : UID
그룹 : GID
inode, pid, UID, GID 는 정수. 컴퓨터는 숫자에 강하므로 숫자로 관리
but, 사용자는 string 이름으로

이 정보는 아래의 명령을 입력하면 알아볼 수 있다.
사용자의 패스워드를 관리하는 파일인데 여기에 UID와 GID의 정보를 알 수 있다.
sudo vi /etc/passwd
/etc/passwd 확인하기

프로세스 관리 관련 시스템 콜
사전작업 : 우분투 리눅스에 gcc설치 (+ vi에디터/한글 설정) → gcc 설치해야 c프로그램을 만들어서 컴파일 할 수 있음.

getpid(), getppid()
- getppid()는 현재 이 함수를, 시스템콜을 호출하는 프로세스의 부모 프로세스의 아이디를 알아오는 시스템콜
제로베이스 컴퓨터 공학 전공자 따라잡기 강의 정리한 내용입니다.