관리 메뉴

IT창고

리눅스 프로세스 본문

서버운영/Linux

리눅스 프로세스

방구석여포 2017. 8. 29. 02:00


프로세스(Process)는 커널의 관리하에 현재 시스템에서 동작중인 프로그램으로 커널은 프로세스를 관리하기 위해 각 프로세스에게 PCB를 할당하고 init프로세스는부팅 시 가장 먼저 실행되어 시스템에 저반적인 설정을 하는 초기화프로세스입니다.

PCB(Process Control Block)는 프로세스 고유번호(PID)입니다.


프로세스에도 종류가 있는데 아래의 표와 같습니다.

 데몬 프로세스

사용자에게 특정기능이나 서비스를 제공하는 프로그램 입니다.

 부모 프로세스

부모 프로세스는 다른 프로세스를 생성하며 init을 제외한 모든 프로세스는 부모프로세스를 가지고 있습니다. 

 자식 프로세스

 부모 프로세스에 의해 생성되는 프로세스로 자식 프로세스는 작업을 완료하면 결과를 부모프로세스에게 전달하고 종료합니다.

 고아 프로세스

자식 프로세스보다 부모 프로세스가 먼저 종료가 되었을때 자식프로세스는 고아 프로세스가 되어 init 프로세스가 관리하게 됩니다. 

 좀비 프로세스

 자식 프로세스의 종료 신호를 부모 프로세스가 처리하지 못할 경우 자식 프로세스는 좀비 프로세스가 됩니다.

 

이러한 프로세스가 실행되는걸 확인하는 명령어가 있습니다 ps 명령어로 시스템에 동작중인 프로세스를 확인합니다 ps명령어에도 옵션이 있는데  -e는 모든 프로세스에 대한 리스트로 출력하고 -f 는 full format으로 출력합니다 보통 e와f옵션을 같이 사용합니다.

나머지옵션으로 -a는 다른사용자들의 프로세스도 출력하고 -u는 사용자이름과시간 등 상세한 정보를 출력하고 -x는 현재 실행되고 있는 모든 프로세스르 출력합니다. 명령어 ps -ef를 입력하면 나오는 필드가있습니다.




UID는 프로세스를 실행시킨 프로세스의 소유자를 뜻하고 PID는 실행된 프로세스에 부여된 숫자를 의미하고 PPID는 parent process id로 프로세스를 생성한 부모 프로세스 PID를 나타내고 C는 스케줄링 관련 필드인데 현재는 사용하지않고 STIME는 프로세스가 연결된 시간이며 TTY는 프로세스가 연결된 터미널을 나타내고 TIME은 프로세스에 의해 사용된 CPU시간을 나타내며 CMD는 실행한 프로세스 이름 혹은 실행한 명령을 뜻합니다.


프로세스에 대해 알아보았다면 이 프로세스를 다루는 방법으로 kill이라는 명령어가 있습니다.

kill 명령어는 프로세스에게 SIGNAL(신호)을 전달하는 명령어로서 kill -l을 입력하면 kill에 관한 신호의 종류가 나옵니다 보통 주로 사용하는 신호는 2번 SIGINT, 9번 SIGKILL, 15번 SIGTERM, 18번 SIGCONT, 19번 SIGSTOP이 이 있습니다. 

사용방법은 kill -[번호/SIGNAL] [PID/작업번호] 입니다. 

ex) kill -9 100 , kill -SIGKILL 100

sleep명령어는 입력한 시간동안 대기하는 상태 프로세스를 생성하는 명령어인데 sleep명령어로 실습해볼수있습니다.


프로세스를 다룰수있다면 프로세스의 동작형태에 대해 알아보겠습니다.

프로세스의 동작형태로 포어그라운드(Foreground Process)와 백그라운드(Background Process)가 있습니다.

포어그라운드는 CLI환경에서 입력하는 대부분의 명령어(프로세스)는 포어그라운드에서 동작이 되고 명령어의 실행과정이나 결과를 화면에 출력하고 백그라운드는 프로세스 종료여부에 관계없이 즉시 명령 대기 상태가 되어 다른 명령어를 사용할 수 있는데 백그라운드로 실행하기 위해서는 명령어 마지막에 "&"(Ampersand)를 붙여서 사용합니다 백그라운드는 장시간 실행되는 명령어 작업에 사용합니다.


백그라운드ex) cp -r /usr /gsk/usr1 &

[1] 5020  <- 백그라운드 명령어 실행시 출력결과 [1]작업번호


이러한 백그라운드에서 동작하면 사람의 눈으로 확인하기 힘든데 백그라운드를 사용하기 위해 명령어가 존재합니다.

jobs명령어는 백그라운드로 동작하는 프로세스를 확인하는 명령어로 백그라운드로 실행하면 진행중인 프로세스를 확인할수 있습니다 fg명령어는 백그라운드의 작업을 포어그라운드로 변경시켜줍니다 반대로 bg명령어는 포어그라운드로 작업하는것을 백그라운드로 변경시켜줍니다. 사용방법은 fg %[작업번호]이고 bg명령어도 같습니다.


시스템에서 실행되고 있는 프로세스는 /proc 디렉토리 아래서 확인할수있습니다.  /proc 디렉토리는 실제 하드디스크에는 존재하지 않고 메모리에 저장되어 있는 내용을 확인할 수 있는 가상의 디렉토리입니다. cat명령어로 확인해볼수있는데 /proc/meminfo를 확인하면 시스템 메모리 정보를 확인할수있습니다. 그 외에도 /proc/cpuinfo로 cpu정보를 확인할수있고 /proc/version으로 커널의 버전을 확인할수있습니다. 


프로세스를 사용하면 cpu에 부하가 생기는 일이 있습니다 이러한 상태를 파악할수있는 명령어로 uptime이라는 명령어가 있습니다. 명령어에 uptime을 입력하면 정보를 볼수있는데 필드를 구분하면 아래와 같습니다.

현재시간   부팅시간   접속한사용자   평균부하      5분   10분  15분 

18:30:03    up  2:50,  3 users,       load average: 0.00, 0.00, 0.00


이러한 정보를 쉽게 확인하는 명령어는 top명령어와 dmidecode명령어가 있는데 top명령어는 현재 시스템의 cpu,메모리 사용률을 모니터링 할수있는 툴이고 dmidecode명령어는 시스템 하드웨어 정보를 종합적으로 확인할수있는 명령어 입니다.

'서버운영 > Linux' 카테고리의 다른 글

리눅스 파일시스템  (0) 2017.08.30
리눅스 예약작업  (0) 2017.08.29
리눅스 소유권과 허가권  (0) 2017.08.25
리눅스 사용자계정  (0) 2017.08.25
리눅스 환경변수와 스크립트  (0) 2017.08.22
Comments