-
프로세스 관리Technique/LPIC 2019. 5. 14. 14:49반응형
프로세스 감시
프로세스는 동작 중의 프로그램을 OS 시스템이 관리하는 기본단위이다. 프로그램을 실행하면 새로운 프로세스가 발생한다.
프로그램은 파일로서 디스크상에 존재하고 있다. 프로그램을 실행하면 해당 프로그램이 다양한 대상 정보들과 함께 메모리상에 읽힌 뒤 CPU가 실행 가능하게 된다. 프로세스는 실행되어 있는, 또는 실행 가능한 상태가 되어 있는 프로그램으로 인식하면 좋다.
프로세스의 생존기간은 다양하게 있다. 서버 프로그램과 같이 긴 시간에 살아 있는 것도 있다면 많은 커맨드에 의해 일순적으로 결과를 내고 종료되는 프로세스도 있다. 현재 실행되고 있는 프로세스를 표시하기 위해서는 ps 커맨드를 사용한다.
옵션 설명 a 다른 유저의 프로세스를 표시한다. f 부모 자식 관계를 트리 구조로 표시한다. u 유저명을 표시한다. x 제어 단말이 없는 데몬 등의 프로세스도 표시한다. -e 모든 프로세스를 표시한다. -l 상세한 정보를 표시한다. -p PID 지정 PID의 프로세스 정보만 표시한다. -C 프로세스명 지정한 이름의 프로세스만 표시한다. -w 길어진 행은 잘라내어 표시한다. ps 커맨드에는 -을 붙이는 옵션과 붙이지 않는 옵션이 있다. 옵션에 따라서 -의 유무로 동작이 달라지는 것에 주의해야 한다. ps 커맨드에는 - 이 없는 옵션을 사용하는 경우가 많다.
현재 실행 중의 프로세스를 지속적으로 감시하기 위해서는 top 커맨드를 사용한다.
top 커맨드를 실행하면 화면에 나눠진다. 시스템의 가동 상태, 2행에는 실행 프로세스 수 3행에는 CPU 상태, 4~5행에는 메모리 스와프의 상태가 표시된다. 그 이후의 행에는 프로세스 별로 정보가 표시된다. 기본적으론 CPU 사용량이 높은 순으로 정렬된다. top 커맨드를 종료하기 ㅜ이해서는 q 키를 누른다.
프로세스에 따라서 실행 중의 다른 프로세스를 기동하는 것도 있다. 원래의 프로세스를 부모 프로세스 부모 프로세스로부터 기동 된 프로세스를 자식 프로세스라고 한다. 이것들의 부모관계에 따라 프로세스의 계층 구조를 표시하기 위해서는 ps 커맨드에 f 옵션을 사용하거나 pstree 커맨드를 사용한다.
프로세스는 PID라고 불리는 고유의 식별자를 가지고 있다. PID는 프로세스가 실행되었을 때의 순서로 붙여진다. Linu에는 시스템을 기동 하면 우선 최초의 init라고 불리는 프로그램이 실행된다. 그렇기 때문에 init의 PID는 보통 1이 된다. 또한 프로세스는 대상 프로세스를 시작한 유저로부터 받은 UID와 그룹을 나타내는 GID를 가지고 있다. UID와 GID네 따라 대상 프로세스가 시스템의 어느 부분에 접근이 가능한가 제한된다. 즉 프로세스는 프로세스를 실행한 유저의 권한으로 동작하는 것이다.
프로세스 종료
프로세스를 종료하기 위해서는 kill 커맨드를 사용한다.
kill 커맨드는 프로세스에 대해서 시그널을 보낸다. 시그널은 프로세스에 보내지는 메시지이다. 프로세스는 시그널을 받아들여 종료나 재실행 등의 받아들여진 시그널에 대하는 동작을 실행한다 시그널에는 시그널 명, 시그널 ID 가 붙어져 있어 kill 커맨드에서는 어느 것이든 지정하는 것이 가능하다. 시그널은 30종류 이상 존재하며 kill -l 커맨드를 시행하면 실행 가능한 시그널의 리스트를 볼 수 있다.
시그널 명 시그널 ID 동작 HUP 1 행업 ( 단말이 제어 불가능, 또는 단절에 따른 종료 ) INT 2 키보드로 부터의 인터럽트 KILL 9 강제 종료 TERM 15 종료 ( 기본 ) CONT 18 정지된 프로세스 재실행 SOTP 19 일시정지 HUP 시그널은 데몬 프로세스의 설정을 변경하는 등, 설정 파일을 다시 읽어들이고 싶을 경우 사용한다.
INT 시그널은 인터럽트에 따른 동작을 정지시킨다.
KILL 시그널은 프로세스를 즉각 강제 종료시킨다.
TERM 시그널은 프로세스를 정상 종료 시킨다. 프로세스는 읽은 파일을 듣거나 적절한 수순으로 종료된다.
시그널을 설정하지 않고 kill 커맨드를 사용할 경우 TERM 시그널이 프로세스에 보내어진다.
kill 커맨드로의 시그널의 지정은 시그널 명도, 시그널 이름에 (SIG)를 붙여도 또는 시그널 ID를 붙여도 상관없다. -s 옵션을 붙여 시그널 ID를 지정해도 상관없다.
프로 기름이 이상 동작을 하고 있을 경우 TERM 시그널로 종료가 불가능할 수도 있다. 이럴 경우 KILL 시그널을 통해 강제 종료하는 것이 좋다.
강제 종료할 경우 해당 프로세스가 열어둔 파일이 열린 채로 남겨져 있다. 시스템에 뭔가 장애가 발생할 가능성도 있기 때문에 KILL 시그널은 최종 수단이라고 생각하는 것이 좋다. 일 번 적으로 부모 프로세스를 강제 종료 시기면 해당 부모 프로세스에 의해 생겨난 자식 프로세스들도 모두 종료된다.
프로세스를 복수 병행하여 지정하는 것도 가능하다.
지정한 프로세스가 이상적인 동작을 하고 있어 종료 안될 경우 문제가 되는 프로세스에 대한 kill 커맨드를 실행하여 해당 프로세스를 종료시킨다. kill 커맨드로 지정한 PID는 ps 커맨드를 사용하여 조사해 보는 것이 좋지만, grep 커맨드를 사용하면 편리하다. pgrep 커맨드는 지정한 이름의 프로세스에 대한 PID를 표시한다.
옵션 설명 -u 유저명 프로세스의 실행 유저를 지정한다 -g 그룹명 프로세스의 실행 그룹을 지정한다. kill 커맨드로는 PID를 지정할 필요가 있지만 killall 커맨드를 사용하면 프로세스 명으로 지정하는 것이 가능하다. 시그널명 또는 시그널 ID의 지정 방법은 kill 커맨드와 동일하다.
killall 커맨드와 동일하게 프로세스 면을 지정하여 시그널을 보내는 커맨드로 pkill 커맨드가 있다. pkill 커맨드도 기본적으로는 TERM 시그널을 보낸다. 시그널의 저장방법은 killall 커맨드와 동일하다
JOB 관리
JOB 이란 유저가 커맨드나 프로그램을 쉘 상에 실행하는 하는 것의 처리 순위이다. 쉘 상에서 하나의 커맨드를 실행하든 복수의 커맨드를 파이프로 이어 실행하든 어느 것이든 하나의 JOB이 된다. JOB은 포어그라운드 또는 백그라운드에서 실행된다.
백그라운드 JOB의 실행
포어그라운드에서 JOB이 실행되어 있으면 키보드로부터의 입력은 모두 해당 JOB에 넘겨진다. 즉 해당 JOB이 종료되기 전까지 쉘 상에서의 다른 작업은 불가능하다. 처리에 시간이 걸리는 JOB는 백그라운드에서 실행하면 JOB의 종료를 기다릴 필요 없이 쉘을 이용할 수 있다 백 그라운드에 커맨드를 실행하기 위해서는 커맨드 라인의 최후에 &를 붙인다.
실행 중인 JOB의 리스트는 jobs 커맨드로 참조 가능하다.
[] 내의 숫자는 job 번호이다. job 번호는 job 이 개시된 순서대로 부여된다. job 번호의 뒤에 +는 현재 실행 중인 job 을 -는 직전에 실행된 job을 나타낸다. 또한 stopped는 실행을 일시 정지한 것, Running 은 백그라운드에서 실행 중인 것을 나타낸다.
유저가 로그아웃한 뒤에서 실행시키고 싶을 경우에는 nohup 커맨드를 사용한다.
포어그라운드와 백그라운드
현재 실행중의 JOB의 모드 ( 포어그라운드와 백그라운드 )를 변경하기 위해서는 bg 커맨드 또는 fg 커맨드를 사용한다.
이미 포어그라운드에서 실행 중인 JOB을 백그라운드로 실행시키고 싶을 경우 우선 Ctrl + Z 키로 JOB을 일시 정지시킨 뒤 다음 job 번호를 인수로 bg 커맨드를 실행한다.
역으로 백 그라운드에서 실행 중인 job 을 포어그라운드로 가져오기 위해서는 fg 커맨드를 사용한다. bg 커맨드와 같이 job 번호를 인수로 넘기면 된다.
시스템 상태 파악
시스템의 상태를 파악하기 위해서는 우선 top 커맨드를 사용하면 편리하지만, 그 외에도 다양한 커맨드가 있다.
상태에 따라 나눠지지만 우선 메모리의 이용상태, 비어있는 상태를 확인하는 것은 free 커맨드를 사용한다.
옵션 설명 -m MB단위로 표시 -s 초 지정한 시간 간격으로 표시 기본은 kB 단위로 표시한다.
Mem 행의 정보는 메모리 정보
Swap에 있는 것은 스왑 메모리의 상태
시스템의 가동시간나, 평균 부하는 uptime 커맨드로 확인할 수 있다.
평균 부하 ( load average)는 CPU가 다른 프로세스를 처리 중이기 실행 대기 상태가 되는 프로세스의 평균 수치이다. 3가지를 표시하는데, 최 군 1분, 5분, 15분간의 평균 수치이다.
이 수치가 탑재되어 있는 CPU 수 ( 또는 코어 수 토털 )를 넘어가게 되면 뭔가의 처리 대기가 발생하는 상태가 된다. 예를 들어 4 코어의 CPU를 2개 가지고 있는 서버에서 8개 이상의 작업을 동시에 수행하면 작업 대기 상태가 벌어진다.
시스템의 아키텍처나 OS를 확인하기 위해서는 uname 커맨드를 사용한다. 커맨드 만 사용하면 OS의 종류가 확인 가능하다.
-a 옵션을 붙이면 호스트 명리나 커널 버전, 아키텍처 등의 상세한 정보를 표시한다.
단말의 활용
서버 관리에는 단말 에뮬레이터를 사용하여 네트워크 경유로 서버의 조작을 하는 것이 일반적이다. screen 커맨드를 사용하면 단말의 안에 가상 단말을 작성하여 복수의 가상 단말을 나눠서 작업하는 것이 가능하다. screen의 주 기능은 다음과 같다.
- 복수의 가상 단말을 열어 탭처럼 사용하는 것
- 윈도를 분리하여 표시하는 것
- 작아 브이 상태를 저장하고, 다음 로그인 때 전개하는 것
반응형'Technique > LPIC' 카테고리의 다른 글
파티션과 파일 시스템의 작성 (0) 2019.05.20 프로세스의 실행 우선도 (0) 2019.05.14 하드 링크와 심벌릭 링크 (0) 2019.05.14 파일의 소유자 관리 (0) 2019.05.14 권한 설정 (0) 2019.05.14