1. [Unix/Linux] 개별 프로세스 식별자 : (PID & PPID)
ㅇ 모든 프로세스는, 생성되는 순간, 시스템으로부터 고유한 번호를 부여 받게됨
- PID (Process ID) : 현재 프로세스의 고유 번호
- PPID (Parent Process ID) : 나를 생성한 '부모' 프로세스의 번호
. 대부분의 프로세스는, 사용자나 다른 프로그램에 의해 실행되므로, 항상 부모가 존재
ㅇ 한편, init (PID 1) : 시스템 부팅 시 커널이 직접 실행하는 최초의 사용자 프로세스
- 모든 프로세스의 '조상'이며,
- 부모가 종료되어 고아가 된 프로세스를 입양하여 관리하기도함
2. [Unix/Linux] 프로세스 식별자의 특징
ㅇ 값의 범위 : 전통적으로, 16비트 정수(1 ~ 32,767)를 사용하지만,
- 현대 리눅스에서는, /proc/sys/kernel/pid_max 설정을 통해,
. 이 상한선을 훨씬 높게도 (222) 조정 가능
- init (모든 프로세스의 조상) : 1, ... (통상, 1 ~ 300 : 시스템 프로세스,데몬 등)
ㅇ 재사용 : 프로세스가 종료되면, 해당 PID는 커널로 반환됨
- 일정 시간이 지난 후, 다른 새 프로세스에 이를 할당 가능
3. [Unix/Linux] PID를 다루는 예시
ㅇ 시스템 호출 例)
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
int main() {
pid_t my_pid = getpid(); // 현재 프로세스 ID
pid_t parent_pid = getppid(); // 부모 프로세스 ID
printf("My PID: %d\n", my_pid);
printf("Parent PID: %d\n", parent_pid);
return 0;
}
- 응용 프로그램 내 pid 참조 : sys/types.h 내 정의된 pid_t(typedef 별칭)를 이용하면 됨
- pid,ppid 확인용 시스템호출 : getpid(), getppid()
ㅇ 주요 쉘 명령어 例)
- ps -ef : 시스템의 모든 프로세스와 PPID를 함께 출력
- ps aux : 실행 중인 모든 프로세스의 상세 정보(CPU, 메모리 점유 등) 확인
- top 또는 htop : 실시간으로 프로세스 상태 및 PID 모니터링
- echo $$ : 현재 사용 중인 쉘(Shell)의 PID 확인