본문 바로가기
네이버클라우드/Linux

Linux 4일차 (2023-04-27) Linux System 관리 - Process 관리

by prometedor 2023. 4. 28.

Process 관리

프로세스

리눅스 시스템은 한마디로 Multi User Multi Tasking System 임

즉 여러 사람이 동시에 시스템에 접속하여 동시에 여러 가지 일들을 처리할 수 있는 시스템이며, 

여기서 여러 가지 일, 작업, Task 등이 바로 Process(task) dla


PID : process id  --> 프로세스 식별을 위한 운영체제 차원에서 부여한 고유번호

 

ps 명령어 사용법

R : run 실행중

S : sleep 잠시 잠들어 있는 상태(20초 이내)

I : idle 유휴상태(20초 이상)

Z : 좀비 process

D : Disk 입출력 대기 상태
명령어 설명
#ps 현재 실행중인 프로세스 정보 간단히 보여줌
#ps -ef 현재 실행 중인 프로세스를 보여주는 명령어 중 하나로, 전체 프로세스 정보를 출력
#ps aux 현재 실행 중인 모든 프로세스의 상세한 정보를 출력
#ps -ef | grep http 현재 실행 중인 모든 프로세스 중에서 http 라는 이름이 포함된 프로세스 정보만 출력
#kill -l signal 정보 보기
#kill -9 100 PID가 '100'인 프로세스를 강제로 종료 (-9 : 강제종료 옵션)
#kill -1 200 PID가 '100'인 프로세스를
#top  
   
#pstree process tree
#pstree -pn 프로세스 정렬
#jobs 백그라운드 job 보기

 

kill

[root@ysy /down/sqlite-autoconf-3410200]# kill -l   --> signal 정보 보기
 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

ㄴ SI 로 시작함 -> SI : signal 을 뜻함

 

ps

--> process status 프로세스 상태

[root@ysy ~]# ps -ef
UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 09:34 ?        00:00:01 /usr/lib/systemd/systemd --system --des
root           2       0  0 09:34 ?        00:00:00 [kthreadd]
root           3       2  0 09:34 ?        00:00:00 [rcu_gp]
root           4       2  0 09:34 ?        00:00:00 [rcu_par_gp]
root           5       2  0 09:34 ?        00:00:00 [netns]
root           7       2  0 09:34 ?        00:00:00 [kworker/0:0H-events_highpri]
root           9       2  0 09:34 ?        00:00:00 
생략 ...

 

kill -9

[root@ysy ~]# ll -i
total 4
25695825 -rw-------. 1 root root 1353 Apr 26 17:01 anaconda-ks.cfg
 1416367 drwxr-xr-x. 2 root root   33 Apr 26 18:23 d3
[root@ysy ~]# ps -ef | grep bash
root         882     776  0 09:40 tty1     00:00:00 -bash
root        1015    1014  0 09:55 pts/1    00:00:00 -bash
root       23428    1015  0 12:23 pts/1    00:00:00 -bash
i-node 
[root@ysy ~]# kill -9 882  --> 882 번 process kill


i-node : 운영체제가 파일을 관리하기 위해 부여하는 번호
kill -9 882  --> 882 번 process kill

 

top

--> 윈도우 작업관리자 느낌

[root@ysy ~]# top
top - 12:26:16 up  2:51,  2 users,  load average: 0.01, 0.07, 0.08
Tasks: 132 total,   1 running, 131 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.2 hi,  0.2 si,  0.0 st
MiB Mem :   1962.9 total,    700.8 free,    445.1 used,   1006.2 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   1517.8 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
  21195 root      20   0       0      0      0 I   0.3   0.0   0:02.88 kworker/0:1-events
  23429 root      20   0    8040   3912   3192 R   0.3   0.2   0:00.01 top
      1 root      20   0  172972  17336  10680 S   0.0   0.9   0:01.61 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
      7 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-event+
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.27 kworker/0:1H-event+
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     12 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_kthre
     13 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_rude_
     14 root      20   0       0      0      0 I   0.0   0.0   0:00.00 rcu_tasks_trace
     15 root      20   0       0      0      0 S   0.0   0.0   0:00.06 ksoftirqd/0
     16 root      20   0       0      0      0 I   0.0   0.0   0:00.48 rcu_preempt
     17 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
     19 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
--> q로 나가면 됨

 

http 서버가 문제라면 

[root@ysy ~]# ps -ef | grep httpd  --> 실행 중인 httpd 이름을 가진 프로세스 출력
root       14872       1  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14873   14872  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14874   14872  0 10:30 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
apache     14875   14872  0 10:30 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
apache     14876   14872  0 10:30 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
apache     15098   14872  0 10:33 ?        00:00:01 /usr/sbin/httpd -DFOREGROUND
root       23433    1015  0 12:30 pts/1    00:00:00 grep --color=auto httpd

ps -ef | grep httpd --> 실행 중인 httpd 이름을 가진 프로세스 출력
systemctl start httpd  --> 시작
systemctl stop httpd  --> 종료
systemctl status httpd  --> 상태
systemctl restart httpdps  --> 재시작

 

pstree

--> 실행 중인 프로세스들을 트리 구조로 보여줌

[root@ysy ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─auditd───{auditd}
        ├─chronyd
        ├─crond
        ├─dbus-broker-lau───dbus-broker
        ├─httpd─┬─httpd
        │       ├─2*[httpd───64*[{httpd}]]
        │       └─httpd───80*[{httpd}]
        ├─irqbalance───{irqbalance}
        ├─login───bash
        ├─polkitd───5*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───sshd───bash───pstree
        ├─systemd───(sd-pam)
        ├─systemd-journal
        ├─systemd-logind
        └─systemd-udevd

 

pstree -p

--> 프로세스 ID(PID)를 함께 출력해줌

[root@ysy ~]# pstree -p 
systemd(1)─┬─NetworkManager(762)─┬─{NetworkManager}(765)
           │                     └─{NetworkManager}(766)
           ├─auditd(721)───{auditd}(722)
           ├─chronyd(754)
           ├─crond(774)
           ├─dbus-broker-lau(758)───dbus-broker(760)
           ├─httpd(23446)─┬─httpd(23447)
           │              ├─httpd(23448)─┬─{httpd}(23451)
           │              │              ├─{httpd}(23453)
           │              │              ├─{httpd}(23455)
           │              │              ├─{httpd}(23457)
           │              │              ├─{httpd}(23459)
           │              │              ├─{httpd}(23461)
           │              │              ├─{httpd}(23462)
           │              │              ├─{httpd}(23464)
           │              │              ├─{httpd}(23466)
           │              │              ├─{httpd}(23468)

생략....

 

 

 

 

서비스 시작과 종료

#service start mysql

#service stop mysql

#service status mysql

#service restart mysql



#systemctl mysql start

#systemctl mysql stop

#systemctl mysql status

#systemctl mysql restart

 

웹 서버 동작시켜 보기

# dnf upgrade -y  --> 무조건 yes 하여 upgrade

# di httpd  --> di : alias 설정 -> dnf -y install

# ps -ef | grep httpd  --> httpd 가 실행 중인지 검색 (시스템에서 실행중인 모든 파일 중 httpd 이름을 포함하는 프로세스만 검색)
root       14869     952  0 10:29 pts/0    00:00:00 grep --color=auto httpd
# systemctl start httpd  --> 웹서버 동작 시키기
# ps -ef | grep httpd
root       14872       1  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14873   14872  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14874   14872  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14875   14872  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     14876   14872  0 10:30 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
root       15089     952  0 10:30 pts/0    00:00:00 grep --color=auto httpd


방화벽 꺼줘야됨(크롬에서 127.0.0.1 페이지 뜨는거 확인)

# systemctl stop firewalld  --> firewalld : 방화벽 / disable : 항상 끔 / stop : 현재 세션에서만 끔

[root@ysy ~]# cd /var/www/html/  --> index 파일 위치
[root@ysy /var/www/html]# echo "hello hello" >> index.html   --> 크롬에 ip : 127.0.0.1 검색하여 확인

** tip

안 될 경우 --> 서버의 네트워크 포트포워드 설정 확인 필요(8080)

 

크롬에서 127.0.0.1  검색하여 확인 시 아래와 같이 출력됨

 

mysql 실행 시켜보기

[root@ysy /var/www/html]# dq mysql   --> dq : alias(dnf list --installed | grep) 설치 목록 중 mysql 이름을 포함하는 패키지 출력
mysql.x86_64                              8.0.30-3.el9_0                   @appstream
mysql-common.x86_64                       8.0.30-3.el9_0                   @appstream
mysql-errmsg.x86_64                       8.0.30-3.el9_0                   @appstream
mysql-selinux.noarch                      1.0.5-1.el9_0                    @appstream
mysql-server.x86_64                       8.0.30-3.el9_0                   @appstream

[root@ysy /var/www/html]# ps -ef | grep mysql  --> 시스템에서 실행 중인 프로그램 중 mysql 이름을 포함한 프로세스 정보 출력 
root       15177    1015  0 10:54 pts/1    00:00:00 grep --color=auto mysql
[root@ysy /var/www/html]# mysql  --> mysql 실행
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib           /mysql/mysql.sock' (2)
--> mysql start 되어있지 않아서 에러 

[root@ysy /var/www/html]# ls
index.html
[root@ysy /var/www/html]# systemctl start mysqld  --> mysql start 시켜줌 (d : 데몬)
[root@ysy /var/www/html]# ps -ef | grep mysql --> 시스템에서 실행 중인 프로그램 중 mysql 이름을 포함한 프로세스 정보 출력 
mysql      15240       1  7 10:57 ?        00:00:00 /usr/libexec/mysqld --basedi           r=/usr
root       15287    1015  0 10:57 pts/1    00:00:00 grep --color=auto mysql


[root@ysy /var/www/html]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.30 Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> exit
Bye

ㄴ systemctl start 이용하여 mysql 실행 시킨 후

ㄴ ps -ef | grep mysql 로 실행 중인 프로그램 중 mysql 이름을 포함한 프로세스 정보 출력 

 

[root@ysy /var/www/html]# systemctl start mysql  --> mysqld 실행 시키기
[root@ysy /var/www/html]# systemctl status mysqld  --> mysqld 상태 보기

ㄴ 실행 중임을 확인

[root@ysy /var/www/html]# systemctl stop mysqld  --> mysqld 종료 시킴
[root@ysy /var/www/html]# systemctl status mysqld  --> mysqld 상태 보기

ㄴ 종료 상태임을 확인

 

 

작업 전환 foreground job, background job

#jobs  --> 백그라운드(background)에서 실행 중인 작업의 목록을 출력해주는

#fg %3  --> 세 번째(background) 작업을 포그라운드(foreground)로 이동

#bg



**** shell 종료시에도 background JOB 유지

#sleep 100 &
--> 백그라운드에서 100초 동안 "sleep" 명령을 실행합니다. 명령 끝에 있는 "&"는 시스템이 백그라운드에서 명령을
실행하도록 지시하므로 프로세스가 실행되는 동안 터미널이나 명령 프롬프트를 계속 사용할 수 있음

#jobs

disown %1
--> 셸의 작업 제어에서 백그라운드에 배치된 첫 번째 작업이 제거됨
즉, 터미널을 닫거나 세션에서 로그아웃하더라도 해당 작업과 관련된 프로세스는 백그라운드에서 계속 실행됨
[root@ysy ~]# jobs
[root@ysy ~]# sleep 7
[root@ysy ~]# sleep 30
^Z    --> Ctrl + Z 로 잠자기 강제로 종료시킬 수 있음
[1]+  Stopped                 sleep 30
[root@ysy ~]# jobs
[1]+  Stopped                 sleep 30
[root@ysy ~]# kill %1  --> 첫 번째 백그라운드 작업을 종료시킴
[root@ysy ~]# jobs  --> 백그라운드(background)에서 실행 중인 작업의 목록을 출력
[1]+  Terminated              sleep 30
[root@ysy ~]#