본문 바로가기
Linux

[Linux] 프로세스

by oncerun 2020. 11. 21.
반응형

프로세스는 커널에 등록된 실행 중인 프로그램을 의미한다. 제한된 자원을 가지고 멀티태스킹을 지원하는 운영체제에서 프로세스는 여러 상태 변화를 겪는다. 따라서 프로세스의 상태를 모니터링하고 관리가 필요하다.

주기적으로 수행되는 작업을 계획하기위헤 데몬 프로그램인 cron서비스를 사용할 수 있다.

 

리눅스의 장점 중 하나는 멀티태스킹을 지원하는 운영체제라는 것이다. 멀티태스킹은 많은 프로그램들이 동시에 수행될 수 있다는 것이다. 리눅스 커널은 실행 중인 여러 프로그램 사이에서 CPU나 메모리와 같은 한정된 자원이 효율적으로 사용될 수 있도록 멀티태스킹을 관리한다.

 

시스템이 처음 구동되면 커널은 몇 개의 커널 프로세스를 실행시킨다. 그리고 init 프로그램을 실행시키며, 계속해서 시스템 서비스를 시작시키는 일련의 초기화 스크립트를 실행시킨다. init 프로세스는 PID가 1이며 모든 사용자 프로세스의 부모 프로세스이다. init 프로세스를 포함하여 많은 시스템 서비스는 백그라운드로 수행되는 데몬 프로그램의 형태이다.

 

 사용자가 로그인을 하거나 새로운 터미널 창을 열면 셸 프로세스가 할당된다. 사용자가 명령을 내리면 셸 프로세스가 명령을 처리하기 위해 자식 프로세스를 만들어 처리하는데 이때 부모와 자식 관계가 생성된다. 커널은 등록된 프로세스를 관리하기 위해 프로세스 컨트롤 블록 (PCB)이라는 자료구조에 각 프로세스의 정보를 저장하며 구별을 위해 PID를 할당한다.

 

PCB에 포함되는 프로세스의 정보들은 다음과 같다.

- PID, PPID : 프로세스 자신과 부모 프로세스의 PID

- UID, GID와 EUID, EGID : 소유자/그룹과 유효 소유자/그룹

- 프로세스의 현재 상태

- CPU 스케줄링에 사용되는 우선순위정보

- 프로세스에 할당된 메모리 주소, 입출력 장치, 파일에 관한 정보

- 여려 종류의 시그널에 대해 어떻게 반응할지에 대한 정보

- 프로세스가 중단되었다가 재시작될 때 필요한 CPU 레지스터의 내용

 

*데몬 프로세스는 프린터의 사용, 로그 메시지의 처리 또는 여러 시스템 서비스나 네트워크 서비스를 제공하는 백그라운드 프로세스로 서버 기능을 하는 프로그램을 말한다. 서비스 요청을 기다렸다가 요청이 발생하면 처리해 주기 위해 시스템이 운영되는 동안 항상 실행 중에 있다. 보통 프로그램 이름 뒤에 데몬을 의미하는 d가 붙어 있다.

 

프로세스의 생성

프로세스가 다른 프로세스를 생성하는 방법으로 fork()와 exec() 시스템 호출이 있다.

사용자가 프로세스가 직접 할 수 없는 일을 수행하기 위해 커널에서 서비스를 요청하는 것을 "시스템 호출"이라고 한다.

파일을 읽고 쓰는 일은 시스템 호출에 의해 수행된다.

 

셸에서 명령을 수행하면 새로운 프로세스가 만들어져 수행되어야 한다. 이때는 fork(), exec() 시스템 호출이 필요하다.

 

fork()는 부모 프로세스가 자신의 복사본 형태로 자식 프로세스를 만든다. fork()를 수행하면 PID와 PPID만 다르고 거의 동일한 2개의 프로세스가 생긴다. 

exec()은 새로운 프로세스를 만드는 대신에 기존 프로세스를 새로운 프로세스로 대체하는 것으로, 원래 프로세스의 메모리 공간을 새로운 프로세스의 실행 코드로 덮어쓴다.

 

예를 들어 ls 명령을 실행하면 fork()에 의해 복사본 자식 프로세스가 새롭게 만들어지고 exec(ls)에 의해 ls 명령을 수행하는 프로세스로 바뀌는 것이다.

PID가 1인 init프로세스를 제외한 모든 사용자 프로세스는 fork() 시스템의 호출의 결과이다.

 

포어그라운드와 백그라운드 프로세스

보통 셸에서 명령을 수행하면 해당 프로세스는 포어그라운드(foreground) 모드로 수행된다.

하나의 터미널에서는 포어그라운드 프로세스가 끝나기 전에는 다른 명령을 수행할 수가 없다. 포어그라운드로 수행되는 프로세스는 입/출력을 할 수 있는데, 이것은 포어그라운드 프로세스가 터미널에 대한 제어권을 가지는 것을 의미한다.

포어그라운드 프로세스가 종료되어야 다시 화면에 셸 프롬프트가 나타나며 명령 대기 상태로 돌아간다.

 

터미널 창을 추가적으로 생성하여 여러 프로그램을 동시에 실행할 수 없고 해당 프로그램이 입력을 요구하지 않고 장시간 실행되어야 하는 경우에는 백그라운드 프로세스로 실행시키는 것이 좋다.

백그라운드 프로세스는 보이지 않는 곳에서 숨어서 동작하는 프로그램이라 할 수 있는데, 백그라운드로 실행시키려면 셸 명령의 끝에 &을 추가하여 실행한다. 백그라운드 프로세스로 실행시키면 셸은 즉시 명령 대기 상태가 된다.

 백그라운드 프로세스는 터미널로 출력은 가능하나 키보드로 입력은 받을 수 없는데 입력이 필요하다면 포어그라운드 모드로 바뀔 때까지 멈춤 상태로 남게 된다.

만약 출력이 터미널에 나 타지 못하도록 하려면 출력을 파일이나 널 디바이스로 리다이렉션 시켜야 한다.

 

특수 권한

 

반응형

'Linux' 카테고리의 다른 글

[Linux] cron 서비스  (0) 2020.11.21
[Linux] 프로세스의 상태  (0) 2020.11.21
[Linux] 파티션 관리  (0) 2020.11.18
[Linux] 마운트와 언마운트  (0) 2020.11.18
[Linux] 파일 찾기와 문자열 검색 명령어  (0) 2020.11.17

댓글