9.2. 프로세스 관리

때때로, 리눅스에서 현재 실행중인 프로세스들을 보고 싶을 때가 있을 것이다. 이러한 프로세스 리스트를 보려면, ``ps -aux'' 라고 타이핑하면 되는데 그 결과는 다음과 같은 식으로 나온다:

USER       PID %CPU %MEM  SIZE   RSS TTY STAT START   TIME COMMAND
bin         69  0.0  1.0   788   320  ?  S   Nov 30   0:00 /usr/sbin/rpc.portmap
frampton 10273  0.0  2.1  1136   664  p0 S    14:12   0:00 -bash
frampton 10744  0.0  1.1   820   360  p0 R    17:25   0:00 ps -aux
frampton 10745  0.0  0.8   788   264  p0 S    17:25   0:00 more
nobody   10132  0.0  1.8  1016   588  ?  S    13:36   0:00 httpd
nobody   10133  0.0  1.8   988   568  ?  S    13:36   0:00 httpd
nobody   10413  0.0  1.8  1012   580  ?  S    14:56   0:00 httpd
nobody   10416  0.0  1.8  1012   580  ?  S    14:56   0:00 httpd
nobody   10418  0.0  1.8  1012   588  ?  S    14:57   0:00 httpd
nobody   10488  0.0  1.7   976   556  ?  S    15:34   0:00 httpd
nobody   10564  0.0  1.8   988   564  ?  S    16:06   0:00 httpd
nobody   10600  0.0  1.8   988   564  ?  S    16:15   0:00 httpd
nobody   10670  0.0  1.8   988   568  ?  S    16:45   0:00 httpd
nobody   10704  0.0  1.7   976   552  ?  S    17:03   0:00 httpd
root         1  0.0  1.0   776   312  ?  S   Nov 30   1:13 init [3]
root         2  0.0  0.0     0     0  ?  SW  Nov 30   0:00 (kflushd)
root         3  0.0  0.0     0     0  ?  SW  Nov 30   0:00 (kswapd)

리스트에는 프로세스의 소유주 (웹 서버와 같은 특별한 서비스의 경우 소유주가 "nobody" 로 되어 있다), 프로세스 고유 번호, 프로세스가 현재 사용하고 있는 CPU 시간의 점유 비율, 프로세스가 사용하고 있는 메모리의 비율, 프로세스가 무엇을 하고 있는 지에 대한 설명 그리고 그 외 관련 정보가 나온다.

어떤 프로세스에 대한 더 자세한 정보를 얻으려면 ``ps pid'' (여기서 "pid" 는 프로세스 고유 번호 - the process identification number - 이다). 위의 예와 같은 상태에서 "ps 10704" 라고 하면 다음과 같이 나올 것이다:

10704  ?  S     0:00 /usr/local/etc/httpd/httpd

이 결과는 이 특정 프로세스가 웹 서버 (아파치 웹 서버는 프로세스 리스트에 여러번 나타나게 되는데 그 이유에 대하여는 7.1절 을 참조하면 된다) 라는 것을 나타낸다.

어떤 서비스가 제대로 운영되고 있지 않다는 것을 알게되면 "kill -HUP pid" (여기서 "pid" 는 프로세스의 고유 번호로서 "ps" 명령에 의하여 나오는 프로세스 리스트에 있는 번호이다) 이라는 명령을 사용할 수 있다. 예를 들어, 인터넷 서비스 (inetd 라고 불리는 프로세스로서 우리의 예에서는 123번 프로세스이다) 가 원하는대로 동작하고 있지 않다면, ``kill -HUP 123'' (또는 더 안전하게 하고 싶다면 프로세스의 이름을 지정하는 명령인 ``killall'' 을 사용하여 ``killall -HUP inetd'' 라고 할 수도 있다) 라고 하여 프로세스를 재시작 시킬 수 있다. kill 명령에서 -HUP 옵션은 "전화를 끊음 - hang up" 을 나타낸다; 프로세스는 이를 스스로 재시작하라는 뜻으로 이해한다.

그래도 문제가 해결되지 않는다면 시스템을 내렸다가 다시 부팅하는 방법을 사용하여야 한다. (이에 대한 자세한 정보는 6.7절 을 참조하시요).

가끔은 어떤 프로세스를 잠시 중지시켰다가 나중에 계속 실행시켜야 할 때가 있다. 예를 들어, 현재 CPU 를 많이 사용하는 어떤 작업을 돌리고 있는데 동시에 IDE 기반의 CD 롬 라이터로 씨디를 구우려고 한다고 생각해보자. IDE 기반의 장치는 입출력을 위하여 CPU 에 상당히 많이 의존하므로 CPU 가 너무 바쁘다면 버퍼 처리를 제대로 할 수 없게 되고 그 결과로서 제대로 구워진 씨디가 아니라 쓸모없는 원반하나를 얻는 수가 생긴다! 다음 두개의 명령은 어떤 프로세스를 잠시 중지시키는 일과 재시작 시키는데 각기 사용된다:

kill -STOP 945
kill -CONT 945

레드햇에서는 프로세스를 시작시키고 중단시키는데 더 좋은 방법이 있는데 그 내용은 아래에 나오는 9.3절 에서 다루고 있다.