Skip to content

Linux 기본명령어 process #
Find similar titles

Structured data

Category
Programming

리눅스 프로세스 관리 #

ps #

리눅스는 다중 사용자, 사용 작업 시스템이기 때문에 여러 개의 프로세스를 동시에 수행하기 때문에 항상 어떤 프로세스들이 실행되고 있는지 모니터링할 필요가 있다. 따라서 현재 시스템에서 실행 중인 프로세스에 관한 정보를 출력하여 사용자에게 정보를 제공하는 명령어가 필요한데 이때 사용하는 명령어가 ps이다.

명령어를 실행하면 프로세스의 리스트를 출력하는 데 각각의 프로세스를 구분하기 위하여 프로세스 구분자 PID를 부여하여 사용자, 프로세스 번호, 명령어 이름, 실행 시간 등을 확인할 수 있다.

기본 명령어 : ps [-option] -a 터미널에서 다른 사용자가 실행한 프로세스 출력 -u 특정 사용자가 실행시킨 프로세스 목록 -x 접속해 있는 터미널 뿐 아니라 사용되는 모든 프로세스 출력 -e 모든 프로세스의 리스트 출력 -f 프로세스의 시간,프로세스의 부모 PID 등 관련 모든 정보를 출력

$ ps

kylee@ngsw1:~$ ps
  PID TTY          TIME CMD
 6185 pts/4    00:00:00 bash
 6212 pts/4    00:00:00 ps

별도의 옵션이 없이 명령어를 실행하면 현재 로그인한 사용자의 터미널 상의 프로세스 실행 정보를 보여준다.

$ ps -aux

kylee@ngsw1:~$ ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 185836  4076 ?        Ss    2016   1:59 /lib/systemd/systemd --system --deserialize 26
root         2  0.0  0.0      0     0 ?        S     2016   0:02 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2016   3:38 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    2016   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S     2016 288:51 [rcu_sched]
root         8  0.0  0.0      0     0 ?        S     2016   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S     2016   0:04 [migration/0]

$ ps -ux 와 같이 사용하면 본인이 실행한 명령어믄 보이지만 -aux 옵션을 사용하면 다른 사용자의 모든 프로세스를 출력한다.

$ ps -ef

kylee@ngsw1:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2016 ?        00:01:59 /lib/systemd/systemd --system --deserialize 26
root         2     0  0  2016 ?        00:00:02 [kthreadd]
root         3     2  0  2016 ?        00:03:38 [ksoftirqd/0]
root         5     2  0  2016 ?        00:00:00 [kworker/0:0H]

위의 명령어는 모든 프로세스의 리스트를 출력하면서 실행된 자식 프로세스의 리스트까지 보여준다. 즉 어떤 프로그램을 실행시켰을 때 부가적으로 실행되는 프로그램의 리스트까지 출력해준다.

$ ps -aux | grep python $ ps -ef | grep python

kylee@ngsw1:~$ ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S  1000  6185  6184  1  80   0 -  5935 wait   pts/4    00:00:00 bash
0 R  1000  6201  6185  0  80   0 -  7549 -      pts/4    00:00:00 ps
kylee@ngsw1:~$

리눅스에서는 많은 프로세스들이 존재하기 때문에 명령어를 실행하면 많은 내용을 화면에 출력하기 때문에 원한느 프로세스를 찾아야 한다. 이때는 관련 내용을 캡처하는 명령어인 grep 과 함께 사용하면 유용하게 본인이 원하는 프로세스를 찾을 수 있다.

kill #

시그널은 프로세스 사이의 통신 수단인데 단순하지만 매우 중요하다. 즉 어떤 프로세스에 메시지를 보내 프로세스를 제어하기 때문이다. 명령어를 실행함으로써 프로세스가 시작되고 그 프로세를 제어하기 위하여 사전에 정의된 시그널이 존재한다. - HUP 1 hangup, 실행 종료. 로그아웃하거나 모뎀 접속을 끊을 때 전송 - INT 2 interrupt, 실행 종료, CTRL-C를 눌렀을 때 전송 - QUIT 3 quit, 실행 종료, CTRL-\를 눌렀을 때 전송 - KILL 9 kill, 무조건적으로 바로 종료, 무조건 즉시 죽일 때 쓰임 - TERM 15 terminate, 가능하면 자연스럽게 종료 시킴 - STOP 17 무조건 즉시 중지 - TSTP 18 정지, 실행을 정지 후 다시 실행할 수 있도록 대기. CTRL-Z를 눌렀을 때 전송 - CONT 19* Continue, STOP이나 TSLP에 의해 정지된 프로세스를 다시 실행

위의 경우처럼 몇 가지 시그널이 존재하는데 불필요한 프로세스, 잘못 실행된 프로세스를 죽이는데 사용할 것은 KILL이다. 이는 명령어 kill과 연관되어 있다. kill 명령어은 현재 수행중인 프로세스에게 종료 시그널을 보내 프로세스를 죽이는데 사용된다. 위의 ps에서 찾은 프로세스를 찾아 특정 명령이 실행되는 프로세스를 제거한다.

$ kill [-signal] PID 특정 프로세스를 죽일 때 사용.

$ kill -9 PID

$ kill -TERM -1 자신이 실행한 모든 프로세스를 종료

Suggested Pages #

0.0.1_20140628_0