­

Centos系统进程管理

  • 2019 年 11 月 12 日
  • 筆記

1、什么是进程

进程是已启动的可执行程序的运行实例,进程有以下组成部分:

1.1 已分配内存的地址空间;

1.2 安全属性,包括所有权凭据和特权;

1.3 程序代码的一个或多个执行线程;

1.4 进程状态

程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx 。

进程: 是程序运行的过程, 动态,有生命周期及运行状态。

2、进程的生命周期

描述如下:

父进程复制自己的地址空间(fork [fɔ:k] 分叉)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID (PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

centos5或6PID为1的进程是:init

centos7 PID为1的进程是:systemd

僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

用自己的话表达:父进程退出了,子进程没有退出, 那么这些子进程就没有父进程来管理了,就变成僵尸进程。

3、进程的属性

进程ID(PID):是唯一的数值,用来区分进程

父进程的ID(PPID)

启动进程的用户ID(UID)和所归属的组(GID)

进程状态:状态分为运行R、休眠S、僵尸Z

进程执行的优先级

进程所连接的终端名

进程资源占用:比如占用资源大小(内存、CPU占用量)

4、使用ps查看进程工具

4.1:常用的参数:

a: 显示跟当前终端关联的所有进程

u: 基于用户的格式显示(U: 显示某用户ID所有的进程)

x: 显示所有进程,不以终端机来区分

4.2常用的选项组合

 [root@docker-01 ~]# ps -aux|more ##是用BSD的格式来显示进程   USER       PID %CPU %MEM   VSZ   RSS TTY     STAT START   TIME COMMAND   root         1 0.0  0.0 128148 6684?       Ss   11月01   0:09 /usr/lib/syste   md/systemd --switched-root--system--deserialize22   root         2 0.0  0.0      0    0?       S    11月01   0:00 [kthreadd]   root         3 0.0  0.0      0    0?       S    11月01   0:00 [ksoftirqd/0]   root         5 0.0  0.0      0    0?       S<   11月01   0:00 [kworker/0:0H]   root         6 0.0  0.0      0    0?       S    11月01   0:00 [kworker/u8:0]   root         7 0.0  0.0      0    0?       S    11月01   0:00 [migration/0]   root         8 0.0  0.0      0    0?       S    11月01   0:00 [rcu_bh]   root         9 0.0  0.0      0    0?       S    11月01   0:12 [rcu_sched]   root        10 0.0  0.0      0    0?       S<   11月01   0:00 [lru-add-drain     ##包含的信息如下   USER:     运行进程的用户   PID:    进程ID   %CPU:   CPU占用率   %MEM:     内存占用率   VSZ:    占用虚拟内存   RSS:       占用实际内存 驻留内存   TTY:    进程运行的终端   STAT:    进程状态     man ps(/STATE)       R     运行       S     可中断睡眠 Sleep       D     不可中断睡眠       T     停止的进程       Z     僵尸进程       X     死掉的进程         Ss     s进程的领导者,父进程       S<    <优先级较高的进程       SN     N优先级较低的进程       R+     +表示是前台的进程组       Sl     以线程的方式运行   START:     进程的启动时间   TIME:    进程占用CPU的总时间   COMMAND:进程文件,进程名     [root@docker-01 ~]# ps -ef|head ##是用标准的格式显示进程   UID       PID PPID C STIME TTY         TIME CMD   root         1    0 011月01 ?      00:00:09 /usr/lib/systemd/systemd --switched-root--system--deserialize22   root         2    0 011月01 ?      00:00:00 [kthreadd]   root         3    2 011月01 ?      00:00:00 [ksoftirqd/0]   root         5    2 011月01 ?      00:00:00 [kworker/0:0H]   root         6    2 011月01 ?      00:00:00 [kworker/u8:0]   root         7    2 011月01 ?      00:00:00 [migration/0]   root         8    2 011月01 ?      00:00:00 [rcu_bh]   root         9    2 011月01 ?      00:00:12 [rcu_sched]   root        10    2 011月01 ?      00:00:00 [lru-add-drain]   ##包含的信息如下   UID: 启动这些进程的用户   PID: 进程的ID   PPID: 父进程的进程号   C: 进程生命周期中的CPU利用率   STIME: 进程启动时的系统时间   TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。   TIME: 运行进程一共累计占用的CPU时间   CMD: 启动的程序名称

4.3对进程的指定列进行排序

 [root@docker-01 ~]# ps aux --sort %cpu |less ##升序排序   [root@docker-01 ~]# ps aux --sort -%cpu |less ##降序排序   [root@docker-01 ~]# ps aux --sort rss |less   [root@docker-01 ~]# ps aux --sort -rss |less

4.4不可中断状态

 [root@docker-01 ~]# tar -zcvf usr-tar.gz /usr/   ###然后在另一个终端不断查看状态,由S+,R+变为D+   [root@docker-01 ~]# ps -axu|grep tar   root     25426 3.8  0.0 123688 1552pts/0   R+  10:31   0:01 tar -zcvfusr-tar.gz /usr/   root     25447 0.0  0.0 112724  984pts/1   S+  10:31   0:00 grep--color=auto tar   root     25426 3.8  0.0 123688 1552pts/0   D+  10:31   0:01 tar -zcvfusr-tar.gz /usr/   root     25447 0.0  0.0 112724  984pts/1   S+  10:31   0:00 grep--color=auto tar

5、找出系统中使用CPU最多的进程

5.1运行top, 找出使用CPU最多的进程,按大写的P,可以按CPU使用率来排序显示

 [root@docker-01 ~]# top   top-10:48:16 up 1day, 18:41,  2users, load average: 0.00, 0.04, 0.08   Tasks: 111total,   2running, 109sleeping,   0stopped,   0zombie   %Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0   KiB Mem : 16266520total, 11269388free,  2162204used,  2834928buff/cache   KiB Swap:  2097148total,  2097148free,        0used. 13687952avail Mem     PID USER     PR NI   VIRT   RES   SHR S %CPU %MEM     TIME+COMMAND   17427kibana    20  02515164  1.3g  10324S   0.7  8.3   9:05.29 node   17255elastic+ 20  04713976308280 15708S   0.3  1.9  11:09.30 java  

5.2在linux系统中一个进程,最多可以使用100%cpu对吗?

 [root@localhost ~]# top   top-10:51:24 up 61days, 23:00,  2users, load average: 46.56, 48.38, 34.85   Tasks: 267total,   1running, 266sleeping,   0stopped,   0zombie   Cpu(s): 96.9%us,  1.6%sy,  0.0%ni,  0.3%id,  0.0%wa,  0.5%hi,  0.5%si,  0.2%st   Mem: 71545156k total, 71079896k used,   465260k free,   58836k buffers   Swap: 2097148k total,       0k used, 2097148k free, 18012268k cached     PID USER     PR NI VIRT RES SHR S %CPU %MEM   TIME+COMMAND   13073smgadmin  20  05451m 1.4g 21m S 130.5  2.0 184:57.92 java   30753smgadmin  20  04801m 1.3g 21m S 92.7  2.0  20:14.24 java   ##可以看到java(脏牛漏洞,用于提权) 进程使用130.5%

如果你的4核心的cpu,你可以运行400%

6、Isof查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)

 [root@docker-01 ~]# yum install lsof   [root@docker-01 ~]# vim a.txt   [root@docker-01 ~]# ps -axu | grep a.txt   root     25526 0.0  0.0 151532 5200pts/0   S+  10:55   0:00 vima.txt   root     25560 0.0  0.0 112724 1004pts/1   S+  10:57   0:00 grep--color=auto a.txt   [root@docker-01 ~]# lsof -p 25526 ##一般用于查看木马进程,在读哪些文件   [root@docker-01 ~]# lsof -i :22 ##用于查看端口,或查看黑客开启的后门端口是哪个进程在使用

7、进程优先级nice

7.1进程调度及多任务

每个CPU(或CPU核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程(和线程数)可以超出实际可用的CPU及核心数量。Linux内核进程调度程序将多个进程在CPU核心上快速切换,从而给用户多个进程在同时运行的印象。

7.2相对优先级 nice

由于不是每个进程都与其他进程同样重要,可告知进程调度程序为不同的进程使用不同的调度策略。常规系统上运行的大多数进程所使用的调度策略为 SCHED_OTHER (也称为SCHED_NORMAL),但还有其它一些调度策略用于不同的目的。

SCHED_OTHER 调度策略运行的进程的相对优先级称为进程的 nice 值,可以有40种不同级别的nice值。

nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。

7.3nice启动级别的设置

 ##启动进程时,通常会继承父进程的 nice级别,默认为0。   [root@docker-01 ~]# sleep 6000 &   [1] 25601   [root@docker-01 ~]# ps axo command,pid,nice |grep sleep   sleep6000                 25601  0   grep--color=auto sleep    25603  0   ##指定启动级别为5   [root@docker-01 ~]# nice -n 5 sleep 6000 &   [2] 25605   [1]   已杀死               sleep6000   [root@docker-01 ~]# ps axo command,pid,nice |grep sleep   sleep6000                 25605  5   grep--color=auto sleep    25607  0   ##更改现有进程的nice级别   25605(进程 ID) 旧优先级为 5,新优先级为 -15   [root@docker-01 ~]# ps axo command,pid,nice |grep sleep   sleep6000                 25605-15   grep--color=auto sleep    25611  0