프로세스는 실행 중인 프로그램의 인스턴스로, 운영체제에서 자원을 할당받는 작업의 단위다.
프로세스 정보
- PID(Process ID) : 각 프로세스의 고유 식별자로, 1부터 시작하여 순차적으로 할당된다.
- PPID(Parent Process ID) : 해당 프로세스를 생성한 부모 프로세스의 ID
- 프로세스 상태 : 실행중, 대기중, 중지됨 등 프로세스의 현재 상태를 나타낸다.
- 프로세스 우선순위 : 시스템 자원 할당을 결정하는 값으로, nice 값으로 조절할 수 있다.
- 메모리 사용 : 프로세스가 사용하는 실제 메모리(RSS)와 가상 메모리(VSZ) 정보를 포함한다.
프로세스의 특징
-
독립성
- 각 프로세스는 독립적인 메모리 공간을 가진다.
- 프로세스 별로 고유한 시스템 자원(CPU 시간, 메모리, 파일 핸들 등)을 할당받는다.
- 한 프로세스의 오류가 다른 프로세스에 영향을 미치지 않도록 보호한다.
-
병렬 실행
- 여러 프로세스가 동시에 실행될 수 있어 멀티태스킹이 가능하다.
- CPU 시분할 기법을 통해 여러 프로세스가 번갈아가며 실행되어 동시 실행처럼 보이게 된다.
- 멀티 코어 시스템에서는 실제로 여러 프로세스가 동시에 실행될 수 있다.
-
계층 구조
- 부모 프로세스가 자식 프로세스를 생성할 수 있다.
- 자식 프로세스는 fork() 시스템 호출을 통해 이루어진다.
- 자식 프로세스는 부모 프로세스의 복사본으로 시작하지만, 이후 exec() 호출을 통해 새로운 프로그램으로 대체될 수 있다.
- 이러한 계층 구조는 프로세스 관리와 자원 할당에 중요한 역할을 한다.
-
프로세스의 상태
-
생성 : 프로세스가 생성되어 초기화되는 상태
-
준비 : CPU 할당을 기다리는 상태
-
실행 : CPU를 할당받아 실행 중인 상태
-
대기 : I/O 작업 등으로 인해 CPU를 사용하지 않고 기다리는 상태
-
종료 : 프로세스 실행이 완료되거나 강제 종료된 상태
-
각 상태 간의 전이는 운영체제의 스케줄러에 의해 관리된다.

-
컨텍스트 스위칭
- CPU가 여러 프로세스를 번갈아 실행하는 과정
- 현재 실행중인 프로세스의 상태를 저장하고 다음 실행할 프로세스의 상태를 복원하는 작업을 포함한다.
- 프로세스의 컨텍스트에는 프로그램 카운터, 레지스터 값, 메모리 맵 등이 포함된다.
- 컨텍스트 스위칭은 상당한 오버헤드를 발생시킬 수 있으니 효율적인 관리가 중요하다.
프로세스와 쓰레드의 차이점
- 프로세스
- 독립적인 메모리 공간을 가지며 각 프로세스는 자체 주소 공간을 가진다.
- 프로세스 간 전환 시 많은 자원이 필요하다.
- 한 프로세스의 문제가 다른 프로세스에 영향을 미치기 어렵다.
- 프로세스 간 통신에는 특별한 메커니즘 필요
- 쓰레드
- 프로세스 내 메모리를 공유하며 같은 프로세스의 쓰레드들은 힙 영역을 공유한다.
- 쓰레드 간 전환이 프로세스보다 빠르고 효율적
- 한 쓰레드의 문제가 같은 프로세스의 다른 쓰레드에 영향을 줄 수 있다.
- 쓰레드 간 통신이 더 쉽고 빠르다.
멀티프로세스보다 멀티스레드가 더 좋은걸까?
멀티스레드가 항상 최선은 아니다.
프로세스의 우선순위
-
Nice
- -20(최고)에서 19(최저)까지의 범위로 우선순위 설정
- 실제 우선순위는 0(최고)에서 139(최저)로 계산됨
- 우선순위 계산 : 20+nice 값 + 100(사용자 프로세스 기준)
-
Nice의 특징
- 기본값은 0이며 음수 값은 루트 사용자만 설정 가능
- 커널은 I/O 대기 시간을 고려해 동적으로 우선순위 조정
- 리눅스의 기본 스케줄러인 CFS는 공정한 CPU 시간 분배를 목표로 함
백그라운드와 포그라운드 프로세스
- 프로세스 실행 모드
- 포그라운드 프로세스 : 사용자와 직접 상호작용
- 백그라운드 프로세스 : 사용자 입력 없이 독립적 실행
- 프로세스 제어
- 백그라운드 실행 : 명령어 뒤에
& 추가 (예 : sleep 100 &)
- 포그라운드 전환 : fg %[작업번호]
- 백그라운드 전환 : Ctrl+Z로 중지 후 bg %[작업번호]
- 작업 관리
- jobs : 현재 셸의 작업 목록 확인
- jobs -l : PID를 포함한 상세 정보 표시