리눅스 시스템에서는 동시에 여러 개의 프로세스가 실행되기 때문에 현재 어떤 프로세스가 실행되는지 확인할 수 있어야 한다. 그리고 필요할 때 적절하게 관리 작업을 하고 반복적인 작업은 작업 예약 기능을 사용하여 자동화할 수 있어야 한다.
리눅스에서 사용자가 입력한 명령은 프로세스가 되어 실행된다. 프로세스는 현재 실행 중인 프로그램을 의미한다.
시스템에서는 사용자가 실행한 프로세스 외에도 사용자 관리, 메모리 관리, 네트워크 접속 관리 등 다양한 기능을 수행하는 많은 프로세스가 실행되고 있다
01 프로세스의 개념
프로세스의 부모-자식 관계
-
리눅스에서 모든 프로세스는 부모-자식 관계를 가지고 있다.
-
필요에 따라 부모 프로세스는 자식 프로세스를 생성하고, 자식 프로세스는 또 다른 자식 프로세스를 생성한다.
-
리눅스 시스템을 부팅할 때 스케줄러가 실행한 프로세스인 systemd와 kthreadd 프로세스를 제외하면 모든 프로세스는 부모 프로세스를 가지고 있다.

-
자식 프로세스는 부모 프로세스에 의해 만들어지는 프로세스다.
-
자식 프로세스는 할 일이 끝나면 부모 프로세스에 결과를 돌려주고 종료된다.
프로세스의 번호
- 각 프로세스는 고유한 번호인 PID를 가지고 있다.
- PID는 1번부터 시작되어 프로세스가 실행되면서 하나씩 증가하여 부여된다.
- 리눅스가 부팅 될 때 PID1번 systemd 프로세스와 PID 2번 kthreadd 프로세스가 실행된다.
- 1번 프로세스는 나머지 모든 시스템 프로세스의 부모 프로세스가 되고, 2번 프로세스는 모든 스레드의 부모 프로세스가 된다.
프로세스의 종류
- 데몬 프로세스
- 특정 서비스를 제공하기 위해 존재하며 리눅스 커널에 의해 실행된다.
- 평소에는 대기 상태로 있다가 서비스 요청이 들어오면 서비스를 제공한다.
- 대표적으로 원격 접속 서비스를 제공하기 위한 sshd 프로세스가 있는데 이를 ssh 서버 데몬이라고 한다.
- 고아 프로세스
- 자식 프로세스가 아직 실행 중인데 부모 프로세스가 먼저 종료된 자식 프로세스
- 이 경우 1번 프로세스가 고아 프로세스의 새로운 부모 프로세스가 되어 고아 프로세스가 작업을 마치고 종료 될 수 있게 한다.
- 좀비 프로세스
- 자식 프로세스는 종료될 때 부모 프로세스에 종료 정보를 보내고, 부모 프로세스가 이 정보를 받으면 자식 프로세스는 프로세스 테이블 목록에서 삭제된다.
- 하지만 자식 프로세스가 종료했는데도 프로세스 테이블 목록에 남아 있는 경우를 좀비 프로세스라고 한다.
- 좀비 프로세스는 프로세스 목록에서 defunct 프로세스라고 나오기도 한다.
- 실제로 실행되지는 않지만 동작 중인 프로세스 테이블 목록을 차지한다.
- 따라서 정상적인 프로세스가 실행되지 않을 수도 있다.
- 좀비 프로세스는 kill 명령으로 제거할 수 없다.
- SIGCHLD 시그널을 부모 프로세를 보내어 부모 프로세스가 자식 프로세스를 정리하도록 하거나 부모 프로세스 자체를 종료해야만 한다.
- 부모 프로세스가 종료되면 좀비 프로세스는 고아 프로세스가 되고, 새로운 부모인 1번 프로세스는 주기적으로 자식 프로세스의 종료 정보를 확인하여 정리한다.
02 프로세스 관리 명령