Wisdom’s Cloud

[LINUX] 11. 프로세스, 데몬, 서비스 본문

LINUX/Beginner

[LINUX] 11. 프로세스, 데몬, 서비스

지혜로운지혜쓰 2021. 1. 30. 13:19
프로세스(Process)
  • 하드디스크에 저장된 실행 코드(프로그램)가 메모리에 로딩되어 활성화된 것이다.

  • 예를 들어 웹 브라우저 프로그램인 Firefox는 하드디스크 어딘가에 저장되어 있을 것이다. 이렇게 하드에 저장된 파일을 '프로그램'이라고 부르며, Firefox를 실행해서 화면에 나타난 상태(=메모리에 로딩된 상태)를 '프로세스'라고 부른다.

 

 

 프로세스와 관련된 필수 개념 및 용어
  • 포그라운드 프로세스: Firefox 등과 같이, 실행하면 화면에 나타나서 사용자와 상호 작용하는 프로세스를 말한다. 화면에서 실행되는 것이 보이는 프로세스라고 생각하면 된다.

  • 백그라운드 프로세스: 실행은 되었지만 화면에 나타나지 않고 뒤에서 실행되는 프로세스를 말한다. 예를 들어 바이러스 백신, 서버 데몬 등은 눈에 보이지 않지만 실행된다.

  • 프로세스 번호: 메모리에 로딩되어 활성화된 프로세스를 구분하려면 각각의 고유 번호가 필요하다. 이렇게 각각의 프로세스에 할당된 고유 번호를 프로세스 번호라고 한다.

  • 작업 번호: 현재 실행되는 백그라운드 프로세스의 순차 번호를 의미한다.

  • 부모 프로세스와 자식 프로세스: 모든 프로세스는 혼자서 독립적으로 실행되는 것이 아니라 부모 프로세스의 하위에 종속되어 실행된다. 예를 들어 Firefox 같은 경우 X 윈도 프로세스가 구동된 상태에서 실행되어야 하므로, X 윈도는 Firefox의 부모 프로세스이며 Firefox는 X 윈도의 자식 프로세스라고 부른다.

 

 

프로세스와 관련된 주요 명령어
  • ps: 현재 프로세스의 상태를 확인하는 명령어로, 많은 옵션과 함께 사용할 수 있다. 프로세스의 번호 및 상태를 확인할 때는 ps -ef | grep 프로세스이름 명령을 사용한다.

  • kill: 프로세스를 강제로 종료하는 명령어로, '-9' 옵션과 함께 사용하여 kill -9 프로세스번호 명령을 실행하면 무조건 프로세스가 종료된다.

  • pstree: 부모 프로세스와 자식 프로세스의 관계를 트리 형태로 보여준다.

 

 

[실습 1] 포그라운드 프로세스와 백그라운드 프로세스를 살펴보자.

  step 0 Server를 실행하고 root 사용자로 접속하자.

 

  step 1 무한 루프를 도는 프로세스를 중지해보자.

1. 터미널에서 "yes > /dev/null" 명령을 입력해 무한 로프를 도는 단순한 프로세스를 생성한다.

* yes 명령은 단순히 yes라는 글자를 화면에 무한 출력하고,

/dev/null은 아무 것도 아닌(=아무 반응도 하지 않는) 장치를 말한다. *

 

2. 터미널을 하나 더 열고 "ps -ef grep yes" 명령으로 프로세스 번호를 확인한 후 "kill -9 4455" 명령을 입력해 프로세스를 종료한다.

* 제일 앞에 나오는 root는 프로세스의 소유주고, 그 다음 4455는 프로세스 번호이며,

그 다음 4421은 부모 프로세스 번호다.

kill 명령으로 프로세스를 종료하면 기존의 다른 터미널에서 실행되던 것이

자동으로 종료되는 것을 확인할 수 있다.

현재 작동 중인 포그라운드 프로세스를 그냥 종료하려면

프로세스가 실행되고 있는 터미널에서 Crtl + C를 눌러도 된다. *

 

  step 2 포그라운드 프로세스 → 백그라운드 프로세스 → 포그라운드 프로세스로 프로세스 상황을 바꿔보자.

1. 다시 "yes /dev/null" 명령을 입력해 포그라운드 프로세스를 생성한 후 Ctrl + Z를 눌러 프로세스를 일시 중지시킨다. 그리고 "bg" 명령을 입력해서 잠시 중지된 프로세스를 백그라운드 프로세스로 계속 실행시킨다.
2. "jobs" 명령을 입력하면 현재 백그라운드로 가동 중인 프로세스를 확인할 수 있고, 제일 앞에 나오는 것이 작업 번호다. "fg 작업번호" 명령을 입력하면 다시 포그라운드 프로세스로 만들 수 있고, Ctrl + C를 눌러 프로세스를 종료하면 된다.

 

  step 3 명령을 실행할 때 처음부터 백그라운드로 실행되도록 해보자.

1. "gedit" 명령을 입력해서 gedit을 실행하면 명령을 입력한 터미널은 더 이상 사용할 수 없게 된다.
2. gedit을 종료하고 이번에는 "gedit &" 명령을 입력하면 터미널을 계속 사용할 수 있게 된다. 즉, 명령어 뒤에 붙이는 &는 백그라운드로 프로세스를 실행하겠다는 의미다.

* 이처럼 프로세스 실행 시 바로 백그라운드 프로세스로 만들 수 있다.

즉, 모든 명령어 뒤에 &를 붙이면 자동으로 백그라운드로 실행되지만 주의할 사항이 있다.

firefox, gedit 등은 별도의 창에서 실행되므로 백그라운드로 실행해도 아무 문제가 없다.

또한 xz, bzip2, gzip 같은 압축 프로그램으로 대용량 압축 파일을 만든다면 시간이 오래 걸릴 텐데

이럴 때 백그라운드 프로세스로 실행하면 유용할 것이다.

하지만 vi 에디터와 같이 현재 터미널에서 입출력해야 하는 프로세스를

백그라운드 프로세스로 실행하는 것은 아무런 의미가 없다. *

 

 

데몬(Daemon) = 서비스(Service)
  • 데몬이라고도 부르는 서비스는 서버 프로세스를 말한다. 즉, 서비스는 웹 서버, 네임 서버, DB 서버 등의 프로세스를 지칭하며, 웹 서버 데몬, 네임 서버 데몬 등으로 부르기도 한다.

  • 서비스는 눈에 보이지 않지만 현재 시스템에서 동작 중인 프로세스이므로 백그라운드 프로세스의 일종이라고 할 수 있다.