제3장 시스템 관리 기초
9. 프로세스 관리
가. jobs 사용방법 :
# jobs
현재 쉘에 대하여 작동 중인 프로세스를 보여주는 명령어입니다.
예 :
# less .bashrc & [1] 1387
# jobs [1]+ Stopped less
.bashrc
#
나. ps [process status]
사용방법 :
# ps
현재 실행중인 프로세스에 대한 여러 가지 정보를 알 수
있습니다.
-------------------------------------------------------------- 작업 번호 프로세스
수행상태 잠시 정지한 상태 -------------------------------------------------------------- [1]
stopped
less
.bashrc --------------------------------------------------------------
-------------------------------------------------------------- 프로세스번호 연결된 제어터미널 CPU
사용시간 해당명령 -------------------------------------------------------------- PID
TTY
TIME
CMD --------------------------------------------------------------
예 :
# ps PID TTY TIME
CMD 1350 pts/0 00:00:00 su 1351 pts/0 00:00:00
bash 1387 pts/0 00:00:00 less 1391 pts/0
00:00:00 ps
#
만약에 지금 사용하는 사용자의 프로세스를 알고 싶은
경우에는 다음과 같이 사용합니다.
예 :
# ps a PID TTY STAT TIME
COMMAND 1318 pts/0 S 0:00
-bash 1350 pts/0 S 0:00
su - 1351 pts/0 S 0:00
-bash 1387 pts/0 T 0:00
less .bashrc 1396 pts/0 R 0:00
ps a
#
STAT은 프로세스의 현재 상태를 보여줍니다.
------------------------------------------ STAT 용도 ------------------------------------------ R
Running S
잠시 정지
상태 I 유휴
상태 Z 좀비
상태 D 디스크
입출력 대기 상태 ------------------------------------------
종종 우리가 TTY을 가지고 있지 않은 프로세스를 볼 수 있습니다.
이것은 서버 프로그램이거나, 또는 백그라운드로 실행 후, nohup 명령을 사용하는
경우입니다. 자기 계정에서의 보다 많은 프로세스의 결과를 보기 위해서는 다음과
같습니다.
예 :
# ps aux|grep jklee jklee 1318 0.0 1.0
2740 1312 pts/0 S 16:41 0:00
-bash root 1402 0.0 0.5 2332
696 pts/0 S 16:53 0:00
grep jklee #
옵션정리
---------------------------------------------------- 옵션 설명 ---------------------------------------------------- A
전체 사용
프로세스 출력 E 프로세스
환경변수 출력 L 결과를
상세하게 출력 U 사용자
이름과 프로세스 시작 시간을 출력 txx xx터미널에서
실행되고 있는 프로세스 출력 x 제어
터미널을 갖고 있지 않은 프로세스 출력 ----------------------------------------------------
예 :
# ps u USER PID %CPU %MEM VSZ
RSS TTY STAT START TIME COMMAND root
1350 0.0 0.8 2936 1060 pts/0
S 16:41 0:00 su - root 1351
0.0 1.0 2796 1372 pts/0 S 16:41
0:00 -bash root 1387 0.0
0.4 1628 612 pts/0 T 16:42
0:00 less .bashrc root 1405 0.0
0.6 2564 768 pts/0 R 16:56
0:00 ps u
#
ps의 출력결과 필드
---------------------------------------------------- USER or PID 프로세스
소유자의 사용자명 %CPU 프로세스의
CPU 사용비율 %MEM 프로세스의
메모리 사용비율 RSS 프로세스가
사용중인 실제 메모리의 크기 ----------------------------------------------------
참고적으로 ps와 grep을 연결해서 보는 경우에 grep이 하나의
process로 인식되어 나타나는 경우도 있는데, 이것을 제거하고 싶다면 다음과 같이
합니다.
# ps aux | grep root | grep -v grep
다. kill
사용방법 :
# kill %작업 번호
# kill <PID>
현재 실행중인 프로세스를 강제로 종료할 때 사용하는 명령입니다.
kill 명령어는 csh, tcsh 등 많은 쉘에서 사용되는 쉘 내장
명령어이고, 그리고 다른 외부 kill 프로그램은 일반적으로 /bin 디렉토리 안에 있습니다.
두명령어는 같은 동작을 합니다.
# kill -l 1) SIGHUP 2)
SIGINT 3) SIGQUIT 4)
SIGILL 5) SIGTRAP 6) SIGABRT 7)
SIGBUS 8) SIGFPE 9) SIGKILL 10)
SIGUSR1 11) SIGSEGV 12) SIGUSR2 13)
SIGPIPE 14) SIGALRM 15) SIGTERM
17) SIGCHLD 18) SIGCONT 19)
SIGSTOP 20) SIGTSTP 21) SIGTTIN 22)
SIGTTOU 23) SIGURG 24)
SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27)
SIGPROF 28) SIGWINCH 29) SIGIO 30)
SIGPWR 31) SIGSYS 32)
SIGRTMIN 33) SIGRTMIN+1 34) SIGRTMIN+2 35) SIGRTMIN+3
36) SIGRTMIN+4 37) SIGRTMIN+5 38) SIGRTMIN+6 39) SIGRTMIN+7
40) SIGRTMIN+8 41) SIGRTMIN+9 42) SIGRTMIN+10 43) SIGRTMIN+11
44) SIGRTMIN+12 45) SIGRTMIN+13 46) SIGRTMIN+14 47) SIGRTMIN+15 48) SIGRTMAX-15
49) SIGRTMAX-14 50) SIGRTMAX-13 51) SIGRTMAX-12 52) SIGRTMAX-11 53) SIGRTMAX-10 54)
SIGRTMAX-9 55) SIGRTMAX-8 56) SIGRTMAX-7 57) SIGRTMAX-6 58)
SIGRTMAX-5 59) SIGRTMAX-4 60) SIGRTMAX-3 61) SIGRTMAX-2 62)
SIGRTMAX-1 63) SIGRTMAX
#
위의 출력 결과는 /bin/bash에 내장되어 있는 kill 명령어에
의해서 출력된 결과입니다.
즉, kill명령으로 프로세스에 보낼 수 있는 시그널을 모두
보려면 위 옵션을 사용하면 되고, 그리고 아무 옵션 없이 사용할 경우 는 15번 SIGTERM을
보내는 것입니다.
그리고 현재의 프로세스를 강제로 종료하기 위해서는 PID번호를
찾고 그리고, 그 번호로 프로세스를 종료합니다.
예 :
# ps PID TTY TIME
CMD 1350 pts/0 00:00:00 su 1351 pts/0 00:00:00
bash 1387 pts/0 00:00:00 less 1428 pts/0
00:00:00 ps
# kill 1387
라. killall
사용방법 :
# killall [프로세스 이름]
이명령어는 프로세스의 이름을 써서 프로세스를 종료시킵니다.
다음과 같이 실행합니다.
[root@ /root]# killall su Session
terminated, killing shell...[root@ns /root]# ...killed. [jklee@ jklee]$
신호의 이름을 지정하지 않으면 killall 명령은 자동적으로
SIGTERM 신호를 보냅니다. killall은 지정된 프로그램의 모든 인스턴스를 죽이기
때문에 주의해서 사용해야 합니다.
마. Priority 조정하기
리눅스에서는 각각의 프로그램마다 CPU를 사용할 수 있는
통제 번호가 있습니다. 즉, 어떤 프로그램이 먼저 CPU를 사용하는가는 우선 순서를
정하여 그 프로그램에게 고유한 범위내의 번호를 할당합니다. 여기에서는 "nice",
"renice"명령을 사용하여 우선권을 조정할 수 있습니다. 리눅스에서의
우선권의 범위는 -20에서 19까지 있는데, 숫자가 작을수록 CPU를 우선적으로 작동합니다.
# ps l F UID PID
PPID PRI NI VSZ RSS WCHAN STAT TTY TIME
COMMAND 000 0 1872 1840 1
1 2936 1060 wait4 SN pts/0 0:00
su - 100 0 1873 1872 9 0
2796 1376 wait4 S pts/0 0:00
-bash 000 0 1924 1873 0 0
1632 668 do_sig T pts/0 0:00
less .bashr 000 0 1926 1873 0
0 1628 612 do_sig T pts/0 0:00
less .bash_ 100 0 2004 1873 5
10 1420 580 do_sig TN pts/0 0:00
mail 000 0 2039 1873 0 0
1632 664 do_sig T pts/0 0:00
less file.p 100 0 2070 1873 12
0 2792 976 - R pts/0
0:00 ps l #
nice
사용방법 :
# nice [-우선권] [명령]
만약에 우리가 file.pl를 우선순위 -10으로 올리려고 할
경우에는 다음과 같이 사용합니다.
예 :
# nice -10 file.pl
만약에 우리가 file.pl를 우선 순위의 가장 작은 순서로
사용하기 위해서는 다음과 같이 사용합니다.
예 :
# nice -20 file.pl
위 명령어의 단점은 각각의 프로그램의 실행 번호를 우리가
잘 알 수 없다는 것입니다. 그리고, 이 명령어는 root에서만 가능하다는 것입니다.
그래서, 우리가 가장 쉬운 방법으로 우선 순서를 조정하는 프로그램이 있습니다.
사용 방법은 다음과 같습니다.
1. ps 명령어를 사용하여 자기가 변경하고, 싶은 프로그램의
PID를 찾는다.
2. 우선 순서를 높이려면 # snice -n PID 사용합니다.
3. 우선 순서를 높이려면 # snice +n PID 사용합니다.
그리고 다른 우선권 조정 프로그램 중에서 "renice"가
있습니다. 사용 방법은 위에서 서술한 내용과 같습니다.
# snice -5 2071 # ps l F UID
PID PPID PRI NI VSZ RSS WCHAN STAT
TTY TIME COMMAND 000 0
1872 1840 1 1 2936 1060 wait4 SN
pts/0 0:00 su - 100 0
1873 1872 15 0 2796 1376 wait4 S pts/0
0:00 -bash 000 0 1924
1873 0 0 1632 668 do_sig T pts/0
0:00 less .bashr 000 0
1926 1873 0 0 1628 612 do_sig
T pts/0 0:00 less .bash_ 100
0 2004 1873 1 0
1420 580 do_sig T pts/0 0:00
mail 000 0 2039 1873 0 0
1632 664 do_sig T pts/0 0:00
less file.pl 100 0 2071 1873 10
-5 1420 580 do_sig T< pts/0 0:00
mail 100 0 2092 1873 19 0
2792 976 - R pts/0
0:00 ps l #
renice
사용방법 :
# renice [우선권] [PID]
여기서 주의할 것은 nice의 경우에는 -우선권을 지정하였는데,
renice의 경우는 -가 빠진다는 것입니다. 그리고 root가 아닐 경우 할당된 우선권
보다 더 낮은 숫자로 다시 부여하지 못합니다. 그리고 우리가 이 명령어는 사용하고
나서 "# ps l"이나, 또는 "ps u"에서 그 결과에 대한 변화를
확인할 수 있습니다. 특히 CPU 점유율이 달라짐을 볼 수 있다.
예 :
#renice 10 2004 0: 예전 우선권 0, 현재 우선권 10
# # ps l
F UID PID
PPID PRI NI VSZ RSS WCHAN STAT TTY TIME
COMMAND 000 0 1872 1840 1
1 2936 1060 wait4 SN pts/0 0:00
su - 100 0 1873 1872 9 0
2796 1376 wait4 S pts/0 0:00
-bash 000 0 1924 1873 0 0
1632 668 do_sig T pts/0 0:00
less .bashr 000 0 1926 1873 0
0 1628 612 do_sig T pts/0 0:00
less .bash_ 100 0 2004 1873 5
10 1420 580 do_sig TN pts/0 0:00
mail 000 0 2039 1873 0 0
1632 664 do_sig T pts/0 0:00
less file.p 100 0 2070 1873 12
0 2792 976 - R pts/0
0:00 ps l #
바. nohup
사용방법 :
# nohup [명령] &
일반적으로 로그아웃하면, 실행 시킨 모두 프로세스는 hangup신호를
받고 모두 종료됩니다. 이것은 포그라운드나 백그라운드 모두 해당됩니다. 만약에
계속적으로 프로세스를 사용하기 위해서는 nohup을 사용합니다.
참고적으로 &가 붙는 이유는 백그라운드로 실행 되어야만
로그아웃이 가능하기 때문입니다.
만약에 우선권이 3이 증가한다면, root가 아닐 경우 아무리
작아도 3이하의 우선권을 가질 수 없게 됩니다. nohup이 실행될 경우 표준 출력과
표준 에러가 화면으로 출력될 수 없으므로 nohup.out이라는 파일을 만들어 그곳으로
출력됩니다. nohup.out의 경우 그룹이나 타인이 접근하지 못하게 허가권이 부여 됩니다.
# nohup ./calcu & [3]
1952 # nohup: appending output to `nohup.out' [3] Exit 127
nohup
./calcu # ps l F
UID PID PPID PRI NI VSZ RSS
WCHAN STAT TTY TIME COMMAND 000
0 1872 1840 0 0
2936 1060 wait4 S pts/0 0:00
su - 100 0 1873 1872 10 0
2796 1376 wait4 S pts/0 0:00
-bash 000 0 1924 1873 0 0
1632 668 do_sig T pts/0 0:00
less .bashr 000 0 1926 1873 0
0 1628 612 do_sig T pts/0 0:00
less .bash_ 100 0 1967 1873 14
0 2792 976 - R pts/0
0:00 ps l # # ls -l nohup.out -rw-------
1 root root 50
7월 10 23:14 nohup.out
#
위에서 주의해 볼 점은 ./calcu의 NI(우선권)가 5라는 것과
nohup.out의 허가권이 -rw-------라는 것입니다.
사. 프로세스 비율 조정
일반적으로 프로그램을 사용하면 사용자는 현재 화면에
나타난 것만 프로그램이 실제한다고 생각합니다. 그러나 사실은 화면뒤에서도 많은
프로그램들이 실행되고 있습니다. 그런데, 만일 자기가 잘 사용하지 않는 프로그램이
foreground에서 실행되면, 자연히 실행 속도가 늦어서 사용자가 불편을 느끼게 됩니다.
그래서 여기서 background와 foreground의 비율을 조정하여 사용할 수 가 있습니다.
1) bg (background)
사용방법 :
# bg
현재 사용하고 있는 프로그램을 백그라운드로 실행하기
위해서는 우선적으로 그 프로그램을 "Ctrl+Z"(중지)하고 그리고, # bg을
실행합니다. 만약에 처음부터 백그라운드에 실행하기 위해서는 다음과 같은 명령을
사용합니다.
예 :
# 명령어 &
[작업번호] <PID>
2) fg (foreground)
사용방법 :
# fg % <작업번호>
이 명령어는 자주 사용되는 쉘들에서 발견되는 쉘
내장 명령어로서 후면에 있는 프로세스들을 전면으로 보내는 역할을 합니다. fg를
다른 인자없이 실행시키면 후면으로 보낸 명령어 중 마지막 명령어가 전면으로 옵니다.
후면에서 여러갱ㅢ 명령어가 실행중일 경우, jobs명령어를 써서 작업 번호를 파악한
후 이 작업 번호를 fg의 인자로 사용해 그 명령어를 전면으로 가져올 수 있습니다.
예를 들어, jobs명령어를 실해ㅇ시켰더니 후면에 두 개의 명령어가 있다고 합시다.
이중 첫 번째 명령어를 전면으로 가져오려면, 다음과 같은 명령문을 실행합니다.
예 :
# less .bashrc & [1] 1924 # less .bash_profile & [2] 1926 [1]+
Stopped less
.bashrc # jobs [1]- Stopped less
.bashrc [2]+ Stopped less
.bash_profile # # fg %1
|