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 자신이 실행한 모든 프로세스를 종료