10-2. 프로세스의 현재 상태 확인 방법과 후면처리 [LINUX]
프로세스의 현재 상태를 확인하는 방법은 Process Status의 약자인 ps 명령어를 사용합니다.
그냥 ps만 입력하면 다음과 같이 PID, TTY, TIME, CMD를 출력합니다.
PID TTY TIME CMD
211 pts/4 00:00:00 bash
685 pts/4 00:00:00 ps
그리고 ps [옵션] 꼴으로 옵션을 사용할 수 있습니다. 대쉬(-)가 붙거나 붙지 않는 옵션들이 있는데, 이는 Unix98, BSD, GNU 모두 사용법이 다른 옵션들이 있습니다. Unix98에서는 대쉬(-), BSD에서는 대쉬를 사용하지 않고 GNU에서는 대쉬 2개(--)를 사용합니다.
먼저 이 시리즈에서 자주 사용하는 "ps au" 명령어의 a와 u는 다음과 같습니다.
a : 현재 터미널의 사용자 고유 프로세스를 출력
u : USER, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME, COMMAND 필드의 정보를 출력
각 필드들의 의미는 다음과 같습니다.
USER : 사용자 이름
PID : 프로세스 ID
%CPU : 마지막 1분 동안 프로세스가 사용한 CPU 점유율
%MEM : 마지막 1분 동안 프로세스가 사용한 메모리의 점유율
VSZ : 가상 메모리에 적재된 프로세스의 KB 단위 크기
RSS : 프로세스의 실제 메모리의 크기로 KB 단위
TTY : 연결되어 있는 터미널
STAT : 실행되고 있는 프로세스의 상태 *
START : 프로세스의 시작 시간
TIME : 프로세스가 소비한 총 시간
COMMAND : 사용자가 실행한 명령 이름
위 필드에서 STAT이 나타내는 상태는 9가지가 있습니다.
D : 디스크 입출력 대기 상태로 인터럽트를 걸 수 없는 상태
R : 실행 중일 경우
S : 짧은 슬립 상태
T : 정지 상태
Z : 좀비 상태
W : 메모리에 상주한 페이지가 없는 프로세스
< : 높은 우선권 프로세스
N : 낮은 우선권 프로세스
L : 페이지가 락이 걸린 상태
다음 장에서 나올 좀비 프로세스의 경우 Z가 표시됩니다.
그리고 Unix98에서 CPU사용률과 실행중인 프로세스 확인에 많이 사용되는 ps -ef의 옵션인 -e와 -f입니다.
-e : 커널 프로세스를 제외한 모든 프로세스를 출력
-f : 풀 포맷으로 출력
다음은 후면처리입니다. 지금까지 일반적으로 사용하던 모든 명령어는 전면처리를 통해 이루어졌습니다.
전면처리는 명령어가 전면에서 실행되고 명령어 실행이 끝날 때까지 쉘이 기다리기에 한 순간에 한 명령어만 입력할 수 있습니다.
후면처리는 명령어가 후면에서 실행되기에 다른 작업을 동시에 수행할 수 있습니다. 명령어 뒤에 &를 붙이면 됩니다. (ex: ./a.out &)
#include<stdio.h>
#include<unistd.h>
int main(){
printf("1");
sleep(10);
printf("2");
return 0;
}
위의 코드를 후면에서 실행시키면, 쉘 위에서 1을 출력하고 다시 명령어를 입력할 수 있는데, 10초 후에 2가 출력되는 것을 볼 수 있습니다. 물론 전면에서 실행시키면 1을 출력하고 아무 것도 못하다가 10초 후에 2를 출력하고 명령어를 입력할 수 있는 상태가 됩니다.