System Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> System Administration for Redhat Linux
[목차]
제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

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.