프로세스란?
실행중인 프로그램, Program Counter를 지닌 프로그램, Process Control Block을 지닌 프로그램, 능동적 엔티티로 순차적 수행을 하는 프로그램 등 다양한 정의를 가지고 있다. 또한 프로세스는 리눅스에서 포어그라운드와 백그라운드 두 종류로 나눠진다.
프로세스가 다른 프로세스를 실행할때, 시스템 호출 방법에는 fork와 exec가 있다. fork는 새로운 메모리공간을 할당 받아 부모 프로세스를 완전 복사하여 새로운 PID로 실행되는 것이며, exec는 원래의 프로세스를 새로운 작업으로 할당하여 프로세스를 실행하는 것을 말한다.
리눅스 부팅으로 커널이 init 프로세스를 호출하고 init은 모든 프로세스의 조상으로 PID 1번을 할당 받는다.
사용자의 명령은 보통 bash셸을 부모로 fork된다.
프로세스의 종류
프로세스는 사용자가 직접 작업을 지켜보는 상태인 포어그라운드에서 실행되는것과 백그라운드에서 실행하는 두 종류가 있다. 백그라운드로 프로세스를 실행하기 위해서는 실행 명령어 뒤에 &만 추가하면 된다.
명령어 참조:
프로세스 관리
프로세스를 효과적으로 관리하기 위한 프로세스로 데몬 프로세스가 있다. 보통 이런 프로그램들의 이름 뒤에는 데몬을 뜻하는 d를 붙인다.
데몬(ddemon)
데몬은 주기적이고 지속적인 서비스 요청을 처리하기 위해 계속 실행되는 프로세스로 백그라운드로 실행된다. 대개 부모 프로세스를 갖지 않으며, 즉 PPID가 1이며, 따라서 프로세스 트리에서 init 바로 아래에 위치한다. 데몬이 되는 방법은 일반적으로 자식 프로세스를 fork하여 생성하고 자식을 분기한 자신을 죽이면서 init이 고아가 된 자식 프로세스를 자기 밑으로 데려가도록 하는 방식이다. 이러한 방법을 ‘fork off and die’라 부르기도 한다.
데몬의 실행 방법에는 두가지가 있다.
standalone
부팅 시에 실행되어 해당 프로세스가 메모리에 계속 상주하며 클라이언트의 서비스 요청을 처리하는 방식으로 웹, 메일 등 빈번한 요청이 계속 들어오는 서비스의 경우를 처리한다.
inetd
프로세스가 메모리에 상주하는것이 아닌 클라이언트의 요청이 들어올때 관련 프로세스를 실행하여 처리 후 자동으로 프로세스를 종료하는 방식으로 효율적인 메모리 관리를 위해 사용되었다. 커널 2.4버전부터는 확장된 xinetd 이 대체하였다.
/etc/rc.d/init.d 디렉터리
시스템에서 제공되는 서비스에 대하여 시작과 중지를 시킬 수 있는 스크립트를 포함하고 있다. 정해진 형식에 따라 스크립트가 작성되어있으며 한개의 인자만을 가진다.
예) start, stop, restart, status, reload 등
아파치 데몬을 실행시 /etc/rc.d/init.d/httpd start
디렉터리 경로는 service 명령어로 대체가 가능하다. service httpd start
rc0.d ~ rc6.d 디렉터리
init.d 디렉터리 데몬 스크립트들은 부팅 시에 init 프로세스가 실행할 때 호출되지만, 부팅 레벨에 따라 불필요한 서비스가 있다. 이를 관리하기 위해 존재하는 디렉터리로 심볼릭 링크가 만들어져 있어 n레벨 실행시 rcn.d 디렉터리의 링크를 점검하여 데몬을 실행시킨다. 디렉터리 안의 S로 시작되는 모든 링크를 번호 순서대로 실행한다.