리눅스 프로세스 관리 - (1) 프로세스 관련 명령어
프로세스 관리

프로세스 관리의 시작
멀티 프로세싱 단위에서 프로세스 관리는 상당히 중요하다. 같은 이름을 가진 프로세스를 한번에 종료하거나, 강제 종료나 정상 종료를 지정하여 프로세스 종료를 수행하는 등 작업 처리 측면에서 상당한 이점이 있기 때문이다. 그러므로 우리는 리눅스에서 프로세스를 관리하는데에 있어서 어떤 명령어들이 있는지 지금부터 알아볼 것이다.
프로세스 정보 확인
ps 명령어
우선 ps 명령부터 알아볼 것이다. ps 명령은 프로세스의 정보를 출력해주는 명령이다. 정확히 말하자면, 옵션 유무에 따라 명령 범위 안에 있는 활성 프로세스의 정보를 출력해주는 명령이다. ps 명령은 /proc 안에 있는 가상 파일 시스템을 통해 프로세스 리스트를 출력한다.
ps 명령은 UNIX 기반 옵션, BSD 기반 옵션, GNU 기반 옵션으로 옵션이 나뉘어 있다. 이들은 대쉬 개수에 따라 구분된다. UNIX 기반은 대쉬가 하나만 있고, BSD 기반은 대쉬가 없으며 , GNU 기반은 대쉬 두 개가 있다.
| 형식 | 옵션 | 설명 |
| UNIX | a | 전체 사용자를 대상으로 프로세스 목록을 출력 |
| UNIX | x | 터미널과 연관되지 않은 프로세스 목록을 출력 |
| UNIX | p | 해당 PID의 정보만 출력 |
| UNIX | u | 프로세스의 소유자를 출력 |
| UNIX | l | 긴 형식으로 출력 |
| UNIX | e | 환경 변수를 출력 |
| BSD | -A, -e | 모든 프로세스를 출력 |
| BSD | -a | 세션 리더와 비터미널 계열 프로세스를 제외하고 출력 |
| BSD | -C | 실행 파일 이름만 출력 |
| BSD | -u | 지정한 사용자의 프로세스 목록을 출력 |
| BSD | -l | 긴 형식으로 출력 |
| BSD | -o | 사용자 지정 형식으로 출력 |
| BSD | -f | 전체 형식으로 출력 |
| GNU | --pid | p와 동일한 기능을 수행 |
| GNU | --user | -u와 동일한 기능을 수행 |
ps 명령의 주요 항목
ps 명령에는 표시할 수 있는 여러 항목이 있으며 자세한 내용은 다음과 같다.
| F | 프로세스 플래그 |
| S | 프로세스 상태 코드 |
| UID | 프로세스 소유자 이름 |
| PID | 프로세스 고유 식별자 |
| PPID | 부모 프로세스 PID |
| C | 프로세서 사용률 |
| PRI | 프로세스 우선순위 |
| NI | nice 값 (-20 ~ 19) |
| SZ | 프로세스가 차지하는 물리 페이지의 크기 |
| WCHAN | 대기 중 대기 대상의 커널 함수 이름 |
| STIME | 프로세스 시작 시간 |
| TTY | 터미널의 종류 |
| TIME | 총 CPU 사용 시간 |
| CMD | 프로세스가 된 명령 |
pstree 명령어
pstree 명령은 프로세스를 트리 형태로 출력해주는 명령이다. 리눅스에서는 프로세스 간 부모와 자식 관계가 성립하기 때문에 이를 그래프의 일종인 트리 형태로 나타낼 수 있다. 해당 기능을 수행하는 것이 바로 이 명령이다. pstree의 옵션은 다음과 같다.
| -a | 명령에 뒤따르는 매개변수 출력 |
| -h | 현재 프로세스와 그의 부모 프로세스를 강조 표시 |
| -n | 이름 대신 PID를 정렬해서 출력 |
| -p | PID를 이름과 함께 출력 |
| -s | 지정한 프로세스의 부모 프로세스를 출력 |
top 명령어
현재 실행되고 있는 프로세스들의 정보나 시스템 정보를 실시간으로 출력하는 명령어이다. top 명령 실행 중에는 특정 키로 기능을 사용할 수 있다. top 명령어의 옵션은 다음과 같다.
| -n | 지정한 숫자만큼만 화면 갱신 후 자동 종료 |
| -u | 지정한 사용자의 프로세스를 실시간 모니터링 |
| -b | 출력 결과를 타 파일이나 프로세스로 전달 |
| -d | 화면 갱신 주기를 초 단위로 설정 |
| -p | 지정한 PID, 즉 특정 식별자의 프로세스 모니터링 |
top 명령의 주요 항목
top 명령에는 표시할 수 있는 여러 항목이 있으며 자세한 내용은 다음과 같다.
| PID | 프로세스의 고유 식별자인 PID |
| PR | 프로세스의 우선순위 |
| SHR | 프로세스가 점유 중인 KB 기준의 양 |
| VIRT | 프로세스의 가상 메모리 |
| USER | 프로세스의 소유자 이름 |
| %CPU | CPU 사용량 |
| TIME+ | %CPU와 표시 내용은 동일하나 단위 시간이 짧음 |
| NI | nice 값 |
| %MEM | 프로세스의 메모리 사용량 |
top 실행 중 단축 명령어
상기 내용에서 top 명령 실행 중에는 특정 키로 기능을 사용할 수 있다고 헀다. 아래 표가 사용할 수 있는 단축키이며, top 명령 실행 중에 사용할 수 있다.
| l, t, m | 각각 요약 정보 토글, 작업 및 CPU 통계 토글, 메모리 정보 토글 |
| f, o | 각각 필드 추가/삭제, 필드 표시 순서 변경 |
| F/O | 정렬할 필드 선택 |
| <, > | F/O와 동일, <는 다음 필드 >는 이전 필드임 |
| R, H | 각각 오름차순/내림차순 토글, 쓰레드 표시 토글 |
| c, i | 각각 명령어 이름 및 라인 토글, 유효 태스크 표시 토글 |
| x, y | 각각 정렬 기준 필드를 강조, 실행 중인 작업을 강조 |
| u | 특정 사용자 표시 토글 |
| k, r | 각각 특정 프로세스 종료, 우선순위 재지정 |
| W | 현재 설정을 파일로 저장 |
| q | 명령 종료 |
| Space/Enter | 화면 갱신 |
| h/? | 도움말 표시 |
프로세스 종료
kill 명령어
kill 명령은 기본값으로 SIGTERM을 보내는 시그널 전송 명령이다. 예를 들어 kill 5555를 입력한 경우 5555 프로세스가 존재한다는 가정 하에 해당 프로세스에 SIGTERM이 전송된다. 옵션은 다음과 같다.
| -(signal), -s (signal) | 지정한 시그널을 보냄 |
| -l | 사용 가능한 시그널 목록 출력 |
사용 가능한 시그널 목록은 다음과 같으며, 시그널의 총 개수는 64개이다.
| 00 | SIGHUP | 10 | SIGCHLD | 20 | Reserved | 30 | SIGRTMIN+15 |
| 01 | SIGINT | 11 | SIGCONT | 21 | SIGRTMIN | 31 | SIGRTMAX-14 |
| 02 | SIGQUIT | 12 | SIGSTOP | 22 | SIGRTMIN+1 | 32 | SIGRTMAX-13 |
| 03 | SIGILL | 13 | SIGTSTP | 23 | SIGRTMIN+2 | 33 | SIGRTMAX-12 |
| 04 | SIGTRAP | 14 | SIGTTIN | 24 | SIGRTMIN+3 | 34 | SIGRTMAX-11 |
| 05 | SIGABRT | 15 | SIGTTOU | 25 | SIGRTMIN+4 | 35 | SIGRTMAX-10 |
| 06 | SIGBUS | 16 | SIGURG | 26 | SIGRTMIN+5 | 36 | SIGRTMAX-9 |
| 07 | SIGFPE | 17 | SIGXCPU | 27 | SIGRTMIN+6 | 37 | SIGRTMAX-8 |
| 08 | SIGKILL | 18 | SIGXFSZ | 28 | SIGRTMIN+7 | 38 | SIGRTMAX-7 |
| 09 | SIGUSR1 | 19 | SIGVTALRM | 29 | SIGRTMIN+8 | 39 | SIGRTMAX-6 |
| 0A | SIGSEGV | 1A | SIGPROF | 2A | SIGRTMIN+9 | 3A | SIGRTMAX-5 |
| 0B | SIGUSR2 | 1B | SIGWINCH | 2B | SIGRTMIN+10 | 3B | SIGRTMAX-4 |
| 0C | SIGPIPE | 1C | SIGIO | 2C | SIGRTMIN+11 | 3C | SIGRTMAX-3 |
| 0D | SIGALRM | 1D | SIGPWR | 2D | SIGRTMIN+12 | 3D | SIGRTMAX-2 |
| 0E | SIGTERM | 1E | SIGSYS | 2E | SIGRTMIN+13 | 3E | SIGRTMAX-1 |
| 0F | SIGSTKFLT | 1F | Reserved | 2F | SIGRTMIN+14 | 3F | SIGRTMAX |
killall 명령어
PID가 아닌 이름으로 kill 시그널을 보낸다. 이름에 부합하기만 하면 해당되는 모든 프로세스가 시그널을 받게 된다. 옵션은 다음과 같다.
| -I, —ignore-case | 대소문자 구분을 무시 |
| -g, —process-group | 프로세스가 속한 그룹에도 시그널을 보냄 |
| -l, —list | 시그널의 목록을 표시 |
| -s, —signal | 시그널 수동 지정 |
| -u, —user | 지정한 사용자의 프로세스에 시그널을 보냄 |
| -v, —verbose | 시그널이 성공적으로 보내졌는지 표시 |
| -w, —wait | 모든 프로세스가 종료할 때까지 기다림 |
| -i | 프로세스 종료 전 사용자에게 물어봄 |
pkill 명령어
문자열 패턴과 이름이 부합하는 프로세스에게 시그널을 보내는 명령어이다. 자세한 옵션은 다음과 같다.
| -(signal), —signal (signal) | 시그널 지정 |
| -g, —pgroup pgrp,… | 이펙티브 그룹 ID 지정 |
| -G, —group gid,… | 리얼 그룹 ID 지정 |
| -t , —terminal term,… | 특정 터미널 지정 |
| -u, —euid euid,… | 이펙티브 사용자 ID 지정 |
| -U, —uid uid,… | 리얼 사용자 ID 지정 |
프로세스 전환
jobs, fg, bg 명령어
현재 실행 중인 작업 목록을 출력한다. jobs -l 의 경우 PID 정보를 추가로 표시하고 jobs -p 의 경우 PID만 표시한다. fg와 bg 명령어는 각각 작업을 포어그라운드와 백그라운드로 지정하는 명령이다. 작업 지정 방식은 다음과 같다; 작업 번호가 1이라면 %1로 기재한다. 현재 작업 번호는 %, %+, %% 중 하나를 사용하며, 이전 작업은 %-, %중 하나를 사용한다.
프로세스 우선순위
nice, renice 그리고 nohup 명령어
-20부터 19까지의 우선순위를 지정하는 명령어이며, 이 명령어는 프로세스 스케줄러에 영향을 준다. 숫자가 낮으면 그만큼 우선순위가 높다는 것이다. nice 명령의 경우 실행할 명령어를 미리 지정해야 하는 반면 renice 명령어는 이미 실행 중인 프로세스에 대해 우선순위 지정이 가능하다. nohup 명령어는 로그아웃 시의 SIGHUP를 가로채는 명령어이다.
nice 명령과 renice 명령의 옵션은 다음과 같다.
| nice | -n, —adjustment | 기존의 값에 지정한 값을 더함 |
| renice | -n, —priority | 기존의 값을 지정한 값으로 덮어씀 |
| renice | -g, —pgrp | 그룹 지정 |
| renice | -u, —user | 사용자 지정 |
| renice | -p, —pid | PID 지정 |
프로세스 검색
pgrep 명령어
프로세스를 프로세스 이름 문자열 매칭 등 특정 기준으로 검색하는 명령어이다. 옵션은 다음과 같다.
| -x | 패턴과 정확히 일치함 |
| -g, —pgroup | 이펙티브 그룹 ID 지정 |
| -G, —group | 리얼 그룹 ID 지정 |
| -u, —euid | 이펙티브 사용자 ID 지정 |
| -U, —uid | 리얼 사용자 ID 지정 |
| -t, —terminal | 특정 터미널 지정 |