六 進程管理

進程管理

1、進程的概念

程序: 文件,通常是二進制,靜態 /usr/sbin/httpd,/usr/sbin/sshd 進程: 是程序運行的過程, 動態,有生命週期的,動態產生和消亡的nginx

一個程序可能對應多個進程web

# ps aux |grep 'sshd'
root      2705  0.0  0.0   7224  1020 ?        Ss   08:48   0:00 /usr/sbin/sshd
root      8158  0.0  0.0   4264   676 pts/1    R+   14:05   0:00 grep sshd

# ps aux | grep "nginx"
root     208011  0.0  0.0  95800  8080 ?        Ss    2018   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
web   402699  0.0  0.1 122940 34492 ?        S    15:52   0:00 nginx: worker process                   
web   402700  0.0  0.1 122940 34560 ?        S    15:52   0:00 nginx: worker process                   
web   402701  0.0  0.1 122940 33440 ?        S    15:52   0:00 nginx: worker process                   
web   402702  0.0  0.1 122940 34536 ?        S    15:52   0:00 nginx: worker process                   
web   402703  0.1  0.1 122940 34560 ?        S    15:52   0:00 nginx: worker process                   
web   402704  0.0  0.1 122940 33440 ?        S    15:52   0:00 nginx: worker process                   
web   402705  0.0  0.1 122940 34584 ?        S    15:52   0:00 nginx: worker process                   
web   402706  0.0  0.1 122940 34520 ?        S    15:52   0:00 nginx: worker process

父進程:程序運行時產生的第一個進程 子進程:由父進程衍生出來的進程shell

注意:若是父進程終止,子進程也會隨之被終止apache

2、查看進程

一、靜態psvim

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1     0.0     0.0       2164   648 ?          Ss     08:47     0:00 init [5]  

USER: 運行進程的用戶
PID: 進程ID
%CPU: CPU佔用率
%MEM: 內存佔用率
RSS:  佔用內存
TTY: 程序運行的終端
STAT:狀態
      S 處於休眠 Sleep
      R 運行

      Z 殭屍進程
      T 中止的進程 
     Ss  s進程的領導者,父進程
     S<  <優先級較高的進程
     SN  N優先級較低的進程
     R+  +表示是後臺的進程組
START: 進程的啓動時間
TIME: 進程佔用CPU的總時間
COMMAND: 進程文件,進程名

# ps axo user,pid,ppid,%mem,command |grep nginx
root     208011      1  0.0 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
web   402699 208011  0.1 nginx: worker process                   
web   402700 208011  0.1 nginx: worker process                   
web   402701 208011  0.1 nginx: worker process                   
web   402702 208011  0.1 nginx: worker process                   
web   402703 208011  0.1 nginx: worker process                   
web   402704 208011  0.1 nginx: worker process                   
web   402705 208011  0.1 nginx: worker process                   
web   402706 208011  0.1 nginx: worker process  

# ps auxf | grep "nginx"
root     208011  0.0  0.0  95800  8080 ?        Ss    2018   0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
web   402699  0.0  0.1 122940 34492 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402700  0.0  0.1 122940 34564 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402701  0.0  0.1 122940 33496 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402702  0.0  0.1 122940 34536 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402703  0.1  0.1 122940 34564 ?        S    15:52   0:01  \_ nginx: worker process                   
web   402704  0.0  0.1 122940 33488 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402705  0.0  0.1 122940 34584 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402706  0.0  0.1 122940 34520 ?        S    15:52   0:00  \_ nginx: worker process                   
web   402707  0.0  0.1 122940 33508 ?        S    15:52   0:00  \_ nginx: worker process   

# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:47 ?        00:00:00 init [5]

查看指定進程的PID網絡

# ps aux |grep sshd
root     10180  0.0  0.0   7224  1024 ?        Ss   16:00   0:00 /usr/sbin/sshd
# pgrep sshd
10180
# pgrep vino-server
10126

# pstree    //查看進程樹

二、動態top(查看、管理進程)ssh

# top
# top -d 1
# top -d 1 -p 10126    查看指定進程的動態信息
# top -d 1 -p `pgrep sshd`    命令替換
# top -d 1 -p $(pgrep sshd)   命令替換
# top -d 1 -p $(pgrep vino-server),1
# top -d 1 -u apache    查看指定用戶的進程
# top -b -n 2 > top.txt 將2次top信息寫入到文件

第一部分:系統總體統計信息tcp

load average: 0.86, 0.56, 0.78      CPU 1分鐘,5分鐘,15分鐘平均負載

第二部分:進程信息ui

命令
M    按內存的使用排序
P    按CPU使用排序
N    以PID的大小排序
R    對排序進行反轉
f    自定義顯示字段

h|?    幫助
<    向前
>    向後
z    彩色

        0---實時--99  100----------139
r    調整進程的優先級 (-20高)  ---0--- (19低)
k    給進程發送信號 1,9,15

3、shell查看、管理進程

設置或調整進程的優先級code

# nice -n -5 sleep 6000 &    //程序運行時設置優先級
# sleep 7000 &
[3] 10089
# renice -20 10089        //對已運行的進程設置新的優先級
10089: old priority 0, new priority -20

給進程發送信號

# kill -l                //列出全部支持的信號
編號 信號名
1) SIGHUP     重啓
9) SIGKILL        強制終止
15) SIGTERM    終止(正常退出,乾淨),缺省信號

4、進程先後臺

5、其餘

做業1: 給sshd進程發送信號

# ps aux |grep sshd
root      9486  0.0  0.0   7224  1056 ?        Ss   15:01   0:00 /usr/sbin/sshd
# kill -1 9486            //發送重啓信號
# ps aux |grep sshd
root      9947  0.0  0.0   7224  1028 ?        Ss   15:42   0:00 /usr/sbin/sshd
# kill 9947                //發送中止信號
# ps aux |grep sshd
root      9953  0.0  0.0   4264   676 pts/1    R+   15:44   0:00 grep sshd

做業2:

# touch file1 file2
# tty 
/dev/pts/1
# vim file1

# tty
/dev/pts/2
# vim file2

# ps aux |grep vim
root      4362  0.0  0.2  11104  2888 pts/1    S+   23:02   0:00 vim file1
root      4363  0.1  0.2  11068  2948 pts/2    S+   23:02   0:00 vim file2

# kill 4362
# kill -9 4363


# killall vim                //給全部vim進程發送信號
# killall httpd

netstat:針對網絡進程

# netstat -tnlp            //查看正在監聽的,使用tcp協議的進程
-t   tcp協議
-u  udp協議
-l   listen
-p  PID/Program name
-n  不反解,不將IP地址解析爲主機名,不將端口號解析成協議名(80 ---> http)
# netstat -tnlp |grep :5900
tcp        0      0 0.0.0.0:5900                0.0.0.0:*                   LISTEN      10126/vino-server   

# netstat -tnlp |grep :80
# service httpd start
# netstat -tnlp |grep vino-server
tcp        0      0 0.0.0.0:5900                0.0.0.0:*                   LISTEN      3772/vino-server    
# netstat -tnlp |grep sshd
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                    LISTEN      8737/sshd 
# netstat -tnlp |grep :80
tcp        0      0 :::80                       :::*                                LISTEN      10364/httpd 

# netstat -an |grep :5900    //查看5900端口鏈接的狀態
'tcp        0      0 0.0.0.0:5900                    0.0.0.0:*                          LISTEN      
tcp       10      0 192.168.2.115:5900          192.168.2.129:46303         ESTABLISHED 
tcp       10      0 192.168.2.115:5900          192.168.2.33:39213           ESTABLISHED 
tcp       10      0 192.168.2.115:5900          192.168.2.116:37023         ESTABLISHED 
tcp        0      0 192.168.2.115:5900           192.168.2.126:35725         ESTABLISHED 
tcp       10      0 192.168.2.115:5900          192.168.2.124:33955         ESTABLISHED 

# netstat -an |grep :80
tcp        0      0 :::80                       :::*                        LISTEN      
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59872   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59873   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59874   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59875   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.1:43007    TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59848   TIME_WAIT   
tcp        0      0 ::ffff:192.168.5.230:80     ::ffff:192.168.5.14:59849   TIME_WAIT   

# netstat -an |grep :80 |awk -F":" '{print $8}' |sort |uniq -c |sort -k1 -rn |head -3
   2231 192.168.5.55
   1031 192.168.5.29
    330 192.168.5.11

/proc目錄 虛擬文件系統: 內核、進程運行的狀態信息

# du -sh /proc 
0       /proc

/etc/cpuinfo
# grep 'processor' /proc/cpuinfo     //邏輯cpu的個數
processor       : 0
processor       : 1
# grep 'processor' /proc/cpuinfo |wc -l
2

# grep 'physical id' /proc/cpuinfo     //物理cpu
physical id     : 0
physical id     : 0
# grep 'physical id' /proc/cpuinfo |sort |uniq -c
      2 physical id     : 0

flags         
lm(64位)
vmx 支持虛擬化 intel
svm 支持虛擬化 AMD

# egrep --color 'lm|vmx|svm' /proc/cpuinfo 
flags           : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm
flags           : fpu vme de clflush dts acpi lm constant_tsc pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm

/proc/cmdline
# cat /proc/cmdline    //內核啓動時的參數
ro root=LABEL=/1 rhgb quiet

/proc/meminfo
# cat /proc/meminfo

# free -m
             total       used       free     shared    buffers     cached
Mem:          2017       1955         61          0        113       1426
-/+ buffers/cache:        416       1600
Swap:         8001          0       8001

# uptime 
 17:20:58 up  8:33,  3 users,  load average: 0.43, 0.36, 0.36

若是卸載proc文件系統後。。。
# mount
# umount /proc/ -l
# free -m
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, run "mount /proc /proc -t proc"

# uptime 
Error: /proc must be mounted
  To mount /proc at boot you need an /etc/fstab line like:
      /proc   /proc   proc    defaults
  In the meantime, run "mount /proc /proc -t proc"


# mount -t proc proc /proc
-t proc        指定文件系統的類型
proc            文件系統,虛擬文件系統
/proc        掛載點
相關文章
相關標籤/搜索