목차
1. ps 명령어
[개요]
# ps [options]
• 현재 실행되고 있는 프로세스들의 정보를 표시
• Process Status
• 주로 "ps -ef | grep 프로세스 정보" 형태로 많이 사용합니다.
1.1. ps 옵션(주요 옵션)
• 매우 많고 다양한 옵션이 있으나 주로 쓰이는 옵션은 정해져 있어 주요 옵션만 작성하였습니다.
[OPTIONS]
-e
: 모든(every) 프로세스를 출력합니다. ( -A 옵션과 동일합니다.)
-f
: 전체(full) 형식의 필드 목록을 출력합니다.
: UID, PID, PPID, C, STIME, TTY, TIME, CMD 필드를 출력합니다.
-l
: 긴(long) 형식의 필드 목록을 출력합니다.
: F, S, UID, PID, PPID, C, PRI, NI, ADDR, SZ, WCHAN, TTY, TIME, CMD 필드를 출력합니다.
-p pid
: 프로세스 번호를 지정해 출력합니다.
-u user
: 사용자 정보를 지정해 출력합니다.
-C command
: 명령어 이름을 지정해 출력합니다.
-o 형식 1, 형식 2,...
: 사용자 정의 형태로 출력
: EX) ps -e -o pid,ppid,uname,pcpu,pmem,comm,tty
1.2. 프로세스의 구성요소
2. ps 명령어 예제
2.1. 현재 터미널에서 실행한 사용자 프로세스의 대한 정보를 출력
# ps
# ps
PID TTY TIME CMD
6350 pts/1 00:00:01 bash
16495 pts/1 00:00:00 ps
[프로세스 확인을 위해 백그라운드에서 실행]
# vi a.txt &
[1] 16663
# ps
PID TTY TIME CMD
6350 pts/1 00:00:01 bash
16663 pts/1 00:00:00 vi
16672 pts/1 00:00:00 ps
# ps -f
UID PID PPID C STIME TTY TIME CMD
root 6350 6330 0 18:48 pts/1 00:00:01 -bash
root 16663 6350 0 21:32 pts/1 00:00:00 vi a.txt
root 16729 6350 0 21:33 pts/1 00:00:00 ps -f
# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 6350 6330 0 80 0 - 29141 do_wai pts/1 00:00:01 bash
0 T 0 16663 6350 0 80 0 - 31076 do_sig pts/1 00:00:00 vi
0 R 0 16732 6350 0 80 0 - 38331 - pts/1 00:00:00 ps
# ps -lf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 6350 6330 0 80 0 - 29141 do_wai 18:48 pts/1 00:00:01 -bash
0 T root 16663 6350 0 80 0 - 31076 do_sig 21:32 pts/1 00:00:00 vi a.txt
0 R root 17507 6350 0 80 0 - 38862 - 21:47 pts/1 00:00:00 ps -lf
2.2. 전체 프로세스 정보 출력
# ps -e
# ps -e
PID TTY TIME CMD
1 ? 02:59:23 systemd
2 ? 00:00:30 kthreadd
4 ? 00:00:00 kworker/0:0H
6 ? 00:05:03 ksoftirqd/0
( ... ) 생략
# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 2020 ? 02:59:23 /usr/lib/systemd/systemd --system --deserialize 20
root 2 0 0 2020 ? 00:00:30 [kthreadd]
root 4 2 0 2020 ? 00:00:00 [kworker/0:0H]
root 6 2 0 2020 ? 00:05:03 [ksoftirqd/0]
( ... ) 생략
# ps -el
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 48559 ep_pol ? 02:59:23 systemd
1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:30 kthreadd
1 S 0 4 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
1 S 0 6 2 0 80 0 - 0 smpboo ? 00:05:03 ksoftirqd/0
( ... ) 생략
# ps -efl
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S root 1 0 0 80 0 - 48559 ep_pol 2020 ? 02:59:23 /usr/lib/systemd/systemd --system --deserialize 20
1 S root 2 0 0 80 0 - 0 kthrea 2020 ? 00:00:30 [kthreadd]
1 S root 4 2 0 60 -20 - 0 worker 2020 ? 00:00:00 [kworker/0:0H]
1 S root 6 2 0 80 0 - 0 smpboo 2020 ? 00:05:03 [ksoftirqd/0]
( ... ) 생략
2.3. 프로세스 번호, 사용자 이름, 명령어 이름을 이용해 프로세스 정보 출력
프로세스 번호
# ps -p pid
사용자 이름
# ps -u username
명령어 이름
# ps -C command
# ps -p 1
PID TTY TIME CMD
1 ? 00:05:50 systemd
# ps -u apache
PID TTY TIME CMD
25537 ? 00:00:00 httpd
25538 ? 00:00:00 httpd
25539 ? 00:00:00 httpd
25540 ? 00:00:00 httpd
25541 ? 00:00:00 httpd
# ps -C vi
PID TTY TIME CMD
2399 ? 00:00:00 vi
16663 pts/1 00:00:00 vi
2.4. 원하는 형태로 프로세스 정보 출력
# ps -o 형식 1, 형식 2,...
[현재 터미널에서 실행한 프로세스의 PID, PPID, COMMAND, Status, StartTime 정보 출력]
# ps -o pid,ppid,comm,s,stime
PID PPID COMMAND S STIME
6350 6330 bash S 18:48
16663 6350 vi T 21:32
17835 6350 ps R 21:52
[전체 프로세스의 PID, PPID, COMMAND, Status, StartTime 정보 출력]
# ps -e -o pid,ppid,comm,s,stime
PID PPID COMMAND S STIME
1 0 systemd S 9월07
2 0 kthreadd S 9월07
4 2 kworker/0:0H S 9월07
6 2 ksoftirqd/0 S 9월07
( ... ) 생략
2.4. head, tail, more를 이용해 출력
프로세스 정보가 매우 많은 경우 | (파이프라인)을 이용해 화면에 출력되는 양을 조절합니다.
# ps | head
# ps | tail
# ps | more
• 간단하게 head, tail, more 명령어 사용법을 아래에 작성했습니다.
2.4.1. head
파일 첫 부분부터 출력
# head [OPTION]... [FILE]...
[OPTIONS]
-n
: 위에서부터 출력할 행을 지정합니다.
2.4.2. tail
파일 뒷부분부터 출력
# tail [OPTION]... [FILE]...
[OPTIONS]
-n
: 위에서부터 출력할 행을 지정합니다.
-f
: 파일 상태 감시
2.4.3. more
화면 단위로 끊어서 출력
# more [FILE]
[COMMAND]
enter
: 1행 아래로 이동
d
: 반 페이지씩 넘어간다.
space bar, z
: 1페이지씩 넘어간다.
f
: 2 페이지씩 넘어간다.
b
: 이전 페이지로 돌아간다.
=
: 현재 위치의 행 번호 표시
/문자열
: 지정한 문자열 검색
v
: 현재 열려있는 파일의 현재 위치에서 vi 편집기 실행
q
: more 명령어 종료
[위에서부터 5줄 출력]
# ps -ef | head -n 5 | cat -n
1 UID PID PPID C STIME TTY TIME CMD
2 root 1 0 0 9월07 ? 00:05:51 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
3 root 2 0 0 9월07 ? 00:00:00 [kthreadd]
4 root 4 2 0 9월07 ? 00:00:00 [kworker/0:0H]
5 root 6 2 0 9월07 ? 00:00:15 [ksoftirqd/0]
[아래에서부터 5줄 출력]
# ps -ef | tail -n 5 | cat -n
1 apache 25539 10626 0 9월19 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
2 apache 25540 10626 0 9월19 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
3 apache 25541 10626 0 9월19 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
4 mysql 31621 1 0 9월13 ? 00:00:00 /bin/sh /usr/local/mariadb-10.0.31/bin/mysqld_safe --datadir=/usr/local/mariadb-10.0.31/data --pid-file=/usr/local/mariadb-10.0.31/data/localhost.localdomain.pid
5 mysql 31695 31621 0 9월13 ? 00:03:09 /usr/local/mariadb-10.0.31/bin/mysqld --basedir=/usr/local/mariadb-10.0.31 --datadir=/usr/local/mariadb-10.0.31/data --plugin-dir=/usr/local/mariadb-10.0.31/lib/plugin --log-error=/usr/local/mariadb-10.0.31/data/localhost.localdomain.err --pid-file=/usr/local/mariadb-10.0.31/data/localhost.localdomain.pid
[명령어를 이용해 페이지 이동]
# ps -ef | more
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 9월07 ? 00:05:52 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 9월07 ? 00:00:00 [kthreadd]
root 4 2 0 9월07 ? 00:00:00 [kworker/0:0H]
( ... ) 생략
root 107 2 0 9월07 ? 00:00:00 [kauditd]
root 288 2 0 9월07 ? 00:00:00 [ata_sff]
root 291 2 0 9월07 ? 00:00:00 [scsi_eh_0]
--More--
2.5. grep을 이용해 원하는 정보 출력
• ★ 가장 많이 사용하는 형태입니다.
|(파이프라인) 전에 ps 명령어로 출력될 내용을 바탕으로 원하는 정보를 출력할 수 있습니다.
# ps | grep 원하는 정보
# ps
PID TTY TIME CMD
6350 pts/1 00:00:01 bash
16663 pts/1 00:00:00 vi
19933 pts/1 00:00:00 ps
# ps | grep 6350
6350 pts/1 00:00:01 bash
# ps | grep pts/1
6350 pts/1 00:00:01 bash
16663 pts/1 00:00:00 vi
19981 pts/1 00:00:00 ps
19982 pts/1 00:00:00 grep
# ps | grep vi
16663 pts/1 00:00:00 vi
# ps | grep -v "bash"
PID TTY TIME CMD
16663 pts/1 00:00:00 vi
20177 pts/1 00:00:00 ps
20178 pts/1 00:00:00 grep
2.6. 프로세스 죽이기(kill)
• ps 명령어를 통해 PID를 확인하여 프로세스를 kill 할 수 있습니다.
• 실제로는 프로세스에 시그널(signal)을 보내는 명령어입니다. (종료 시그널(9)을 보내 종료)
# kill [ -s signal | -p ] [ -a ] [ -- ] pid ...
# kill -signal pid ...
[시그널 번호 종류]
# 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
16) SIGSTKFLT 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 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
# ps
PID TTY TIME CMD
6350 pts/1 00:00:01 bash
20805 pts/1 00:00:00 vi
20807 pts/1 00:00:00 ps
[vi 명령어 kill 하기]
# kill -9 20805
or
# kill -s 9 20805
[1]+ Stopped vi a.txt
2.7. 특정 이름의 프로세스 죽이기(kill)
# kill -9 `ps -ef | grep 프로세스 | grep -v grep | awk '{print $2}'`
# ps
PID TTY TIME CMD
6350 pts/1 00:00:01 bash
21281 pts/1 00:00:00 vi
21383 pts/1 00:00:00 ps
[vi kill]
# kill -9 `ps -f | grep vi | grep -v grep | awk '{print $2}'`
[1]+ 죽었음 vi a.txt
'OS > Linux' 카테고리의 다른 글
[Linux] 리눅스 프로세스 작업 전환 (Background, Foreground) (0) | 2021.09.22 |
---|---|
[Linux] 서버 상태 확인 스크립트 (0) | 2021.09.21 |
[Linux] 리눅스 원하는 파일 찾기 - find (0) | 2021.09.19 |
[Linux] 리눅스 파일에서 원하는 내용 찾기 - grep (0) | 2021.09.18 |
[Linux] vi,vim 에디터 없이 파일 수정하기 - echo, cat, sed (1) | 2021.09.11 |