프로세스 관리

oogu ㅣ 2022. 5. 30. 22:55

@ 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

ls /proc

숫자 디렉토리는 현재 실행 중인 프로세스 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 &

'리눅스' 카테고리의 다른 글

리눅스 shell  (0) 2022.05.30
권한  (0) 2022.04.07
vi, vim 편집기  (0) 2022.04.03
압축 및 아카이빙  (0) 2022.04.03
리눅스 계정  (0) 2022.04.03