운영체제에서 프로세스는 컴퓨터 프로그램이 실행되는 동안의 동적인 작업 단위를 의미한다.
프로세스 vs. 바이너리
바이너리
- 바이너리는 실행 가능한 프로그램 파일(예:
/bin/ls, /usr/bin/python)이다.
- 디스크에 저장된 정적인 상태의 프로그램이며, 사용자가 실행하면 운영체제가 이를 메모리에 로드해 실행한다.
- 대부분 컴파일된 기계어 코드로 구성되어 있으며, 실행을 위한 준비 상태이다.
프로세스
- 프로세스는 바이너리가 실행될 때 생성되는 동적 작업 단위이다.
- 실행 중인 프로그램으로서, 운영체제가 CPU와 메모리를 할당해 관리한다.
- 예: 사용자가
ls 명령어를 실행하면 ls 바이너리가 로드되어 프로세스로 동작한다.
- 프로세스는 고유한 ID(PID, Process ID)로 구별된다.
바이너리가 레시피라면, 프로세스는 레시피를 따라 실제로 요리하는 행위!
Foreground Process (포그라운드 프로세스)
정의
- 사용자가 실행 중에 직접 상호작용하는 프로세스이다.
- 명령어를 실행하면 결과가 바로 터미널에 출력되며, 입력이 필요하면 사용자에게 대기한다.
- 기본적으로 대부분의 명령어는 포그라운드에서 실행된다.
특징
- 프로세스가 종료될 때까지 터미널을 점유한다.
- 실행 중인 동안 터미널은 다른 작업을 수행할 수 없다.
예시
sleep 10
이 명령은 10초 동안 아무 작업도 하지 않고 대기하는 포그라운드 프로세스를 실행한다.
Background Process (백그라운드 프로세스)
정의
- 사용자의 직접적인 상호작용 없이 백그라운드에서 실행되는 프로세스이다.
- 터미널을 점유하지 않으므로, 동시에 다른 작업을 수행할 수 있다.
사용법
- 명령어 끝에
&를 붙이면 백그라운드로 실행된다.
sleep 10 &
위 명령은 10초 동안 백그라운드에서 실행된다.
특징
- 백그라운드 프로세스는 종료되더라도 터미널에는 직접적인 결과가 출력되지 않는다.
- 백그라운드에서 실행 중인 프로세스의 상태를 보려면
jobs 명령을 사용한다.
- 프로세스를 다시 포그라운드로 가져오려면
fg 명령을 사용한다.
활용
- 긴 작업이나 서버와 같은 지속적으로 실행되는 작업에 유용하다.
python my_server.py &
Ctrl+C
정의
- Ctrl+C는 터미널에서 실행 중인 포그라운드 프로세스를 강제로 종료하는 단축키이다.
- 이는 운영체제의 SIGINT (Interrupt) 신호를 프로세스에 전달한다.
- 사용자 요청에 의해 현재 실행 중인 작업을 중단할 수 있는 간단한 방법이다.
작동 방식
- 사용자가
Ctrl+C를 누르면 SIGINT 신호가 포그라운드 프로세스에 전달된다.
- 대부분의 경우, 프로세스는 이 신호를 받아 종료된다.
sleep 30
제한
- 일부 프로세스는 SIGINT 신호를 무시하도록 설계될 수 있다. 이런 경우, 강제 종료를 위해
kill 명령이나 Ctrl+Z로 일시 중단 후 처리가 필요하다.
정리
- 바이너리와 프로세스:
바이너리는 정적 실행 파일이고, 프로세스는 이를 실행한 동적 작업이다.
- Foreground Process vs. Background Process:
포그라운드 프로세스는 사용자와 상호작용하는 실행 중인 작업이고, 백그라운드 프로세스는 터미널에 비활성 상태로 실행된다.
- Ctrl+C:
포그라운드 프로세스를 종료하는 데 사용되며, 프로세스 관리의 기본적인 방법이다.