@ 09_프로세스 관리
- 프로세스란 메모리에 올라간 프로그램 단위를 의미한다.
PID 프로세스 식별자
PPID 부모 프로세스 식별자
1. 프로세스 정보 확인
1. ps
현재 명령어를 실행한 프로세스 정보 확인
2. ps -f
현재 명령어를 실행한 프로세스 상세 정보 확인
[root@Client1 /root]# ps -e // 모든 프로세스 정보 확인
~ 중간 생략 ~
[root@Client1 /root]# ps -ef // 모든 프로세스 상제 정보 확인
~ 중간 생략 ~
[root@Client1 /root]# ps -ef | grep rsyslog
root 1157 1 0 12:56 ? 00:00:00 /usr/sbin/rsyslogd -n
root 3784 3732 0 13:27 pts/1 00:00:00 grep --color=auto rsyslog
[root@Client1 /root]# ps -U root // root 계정으로 실행된 프로세스 확인
~ 중간 생략 ~
[root@Client1 /root]# ps -fU root // root 계정으로 실행된 프로세스 확인
~ 중간 생략 ~
[root@Client1 /root]# who
root tty2 2022-05-30 09:40 (tty2)
root pts/0 2022-05-30 11:58 (192.168.2.1)
user1 pts/1 2022-05-30 13:17 (192.168.2.1)
user2 pts/2 2022-05-30 13:18 (192.168.2.1)
[root@Client1 /root]# ps -t pts/1 // pts/1 터미널로 접속하여 실행된 프로세스 확인
PID TTY TIME CMD
7916 pts/1 00:00:00 bash
[root@Client1 /root]# ps -ft pts/1
UID PID PPID C STIME TTY TIME CMD
user1 7916 7910 0 13:17 pts/1 00:00:00 -bash
[참고] CentOS7 버전 이후 '1'번 프로세스는 'systemd' 이다. (CentOS6 버전까지는 init.d가 '1'번 프로세스로 동작하였음.)
[root@Client1 /root]# ps -ef | head -2
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 09:39 ? 00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 18
2. 프로세스 관리
- X 윈도우에서 진행
1) FG(Foreground)
- 쉘 프롬프트에서 명령어를 실행하여 프로세스가 실행 중이면, 쉘 프롬프트를 사용할 수 없는 상태
- gedit 프로그램이 실행되면, gedit 프로그램은 사용이 가능하지만 쉘 프롬프트는 사용할 수 없다.
[root@Client1 /root]# gedit
(Ctrl+z)
[1]+ Stopped gedit
- 'Ctrl+z'를 실시하면, gedit 프로그램은 사용이 안되고 쉘 프롬프트는 사용할 수 있다.
[root@Client1 /root]# jobs
[1]+ Stopped gedit
[root@Client1 /root]# fg 1
gedit
- 'fg' 명령어를 실행하면, 다시 gedit 프로그램은 사용이 가능하지만 쉘 프롬프트는 사용할 수 없다.
- gedit 종료
[root@Client1 /root]#
Ex) FG 상태 파악
[root@Client1 /root]# jobs
[1] Stopped gedit
[2]- Stopped gnome-system-monitor
[3]+ Stopped firefox
- 'gedit'를 다시 사용하려면 어떤 명령을 이용해야하는가?
- 'gnome-system-monitor'를 다시 사용하려면 어떤 명령을 이용해야하는가?
- 'firefox'를 다시 사용하려면 어떤 명령을 이용해야하는가?
2) BG(Background)
- 쉘 프롬프트에서 명령어를 실행하여 프로세스가 실행 중이면, 쉘 프롬프트를 사용할 수 있는 상태
- '&'를 이용하여 gedit 프로그램이 실행되면, gedit 프로그램 및 쉘 프롬프트 사용이 가능하다.
[root@Client1 /root]# gedit &
[1] 4121
[root@Client1 /root]# jobs
[1]+ Running gedit
- gedit 종료
[root@Client1 /root]# <엔터>
[1]+ Done gedit
3. 프로세스 종료
- 'kill' 명령어를 이용하여 동작 중인 프로세스를 종료한다.
- 대표적인 프로세스 종료 신호 유형 : 1) SIGHUP, 2) SIGINT, 9) SIGKILL, 15) SIGTERM, 20) SIGTSTP
[root@Client1 /root]# 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
1) SIGHUP 프로세스 재시작(프로세스 종료 -> 재실행)
2) SIGINT 현재 프로세스 강제 종료 (키보드 인터럽트, Ctrl+c)
9) SIGKILL 프로세스 강제 종료
15) SIGTERM 프로세스 정상 종료
20) SIGTSTP 현재 프로세스 강제 중지 (Ctrl+z)
Ex1) 프로세스 종료 예제
[root@Client1 /root]# sleep 1000 &
[1] 4203
[root@Client1 /root]# sleep 2000 &
[2] 4204
[root@Client1 /root]# sleep 3000 &
[3] 4205
[root@Client1 /root]# ps
PID TTY TIME CMD
2006 pts/0 00:00:00 bash
4203 pts/0 00:00:00 sleep
4204 pts/0 00:00:00 sleep
4205 pts/0 00:00:00 sleep
4206 pts/0 00:00:00 ps
[root@Client1 /root]# kill -9 4203
[root@Client1 /root]#
[1] 죽었음 sleep 1000
[root@Client1 /root]# kill -15 4204
[root@Client1 /root]#
[2]- 종료됨 sleep 2000
[root@Client1 /root]# kill 4205
[root@Client1 /root]#
[3]+ 종료됨 sleep 3000
[root@Client1 /root]# ps
PID TTY TIME CMD
2006 pts/0 00:00:00 bash
4209 pts/0 00:00:00 ps
Ex2) user1에서 'vi /etc/issue'를 실행한 다음에, root에서 이 프로세스를 강제로 종료한다.
[user1@Client1 /home/user1]$ vi /etc/issue
1 CentOS release 6.6 (Final)
2 Kernel \r on an \m
- root에서 user1이 실행한 vim 편집기를 강제 종료한다.
[root@Client1 /root]# ps -ef | grep vim
user1 4354 3828 0 13:38 pts/0 00:00:00 vim /etc/issue
root 4360 3732 0 13:38 pts/1 00:00:00 grep --color=auto vim
[root@Client1 /root]# ps -U user1
PID TTY TIME CMD
3807 ? 00:00:00 systemd
3811 ? 00:00:00 (sd-pam)
3820 ? 00:00:00 pulseaudio
3821 ? 00:00:00 sshd
3828 pts/0 00:00:00 bash
3892 ? 00:00:00 dbus-daemon
4354 pts/0 00:00:00 vim
[root@Client1 /root]# kill -9 4354
- user1에서 '죽었음' 문자열이 출력되었는지 확인한다.
[user1@Client1 /home/user1]$ vi /etc/issue
1 죽었음
[user1@Client1 /home/user1]$
[user1@Client1 /home/user1]$
[user1@Client1 /home/user1]$
Ex) BG 상태 파악 및 프로세스 종료
[root@Client1 /root]# jobs
[1]- Running gedit &
[2]+ Running gnome-system-monitor &
[root@Client1 /root]# ps -ef | egrep "gedit|gnome-system"
root 11434 8263 1 14:14 pts/3 00:00:01 gedit
root 11446 8263 2 14:14 pts/3 00:00:02 gnome-system-monitor
root 11911 8263 0 14:16 pts/3 00:00:00 grep -E --color=auto gedit|gnome-system
- 'gedit'를 강제 종료하려면 어떤 명령을 이용해야하는가?
- 'gnome-system-monitor'를 정상 종료하려면 어떤 명령을 이용해야하는가?
4. '/proc' 디렉토리
- 프로세스가 생성되면 '/proc' 디렉토리에 프로세스 ID 번호를 이용하여 해당 프로세스 디렉토리를 생성하여 운영한다.
[root@Client1 /root]# sleep 1000 &
[1] 4255
[root@Client1 /root]# ps -ef | grep sleep
root 11972 952 0 14:19 ? 00:00:00 sleep 60
root 11978 6661 0 14:20 pts/0 00:00:00 sleep 1000
root 11982 6661 0 14:20 pts/0 00:00:00 grep --color=auto sleep
숫자 디렉토리는 현재 실행 중인 프로세스 id이다.
[root@Client1 /root]# ls /proc/11978
~ 중간 생략 ~
- 해당 프로세스가 종료되면, 해당 프로세스 디렉토리도 소멸된다.
[root@Client1 /root]# kill -9 11978
[root@Client1 /root]#
[1]+ 죽었음 sleep 1000
[root@Client1 /root]# ls /proc/11978
ls: cannot access '/proc/11978': 그런 파일이나 디렉터리가 없습니다
[root@Client1 /root]# ls -l /proc | grep 11978
5. 'gnome-system-monitor'
- X 윈도우에서 사용할 수 있는 GUI 기반 프로세스 정보 확인 도구
[root@Client1 /root]# gnome-system-monitor &