前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Centos系统进程管理

Centos系统进程管理

作者头像
胡齐
发布2019-11-12 18:09:13
7740
发布2019-11-12 18:09:13
举报
文章被收录于专栏:运维猫运维猫

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常用的选项组合

代码语言:javascript
复制
 [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对进程的指定列进行排序

代码语言:javascript
复制
 [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不可中断状态

代码语言:javascript
复制
 [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使用率来排序显示

代码语言:javascript
复制
 [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对吗?

代码语言:javascript
复制
 [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)

代码语言:javascript
复制
 [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启动级别的设置

代码语言:javascript
复制
 ##启动进程时,通常会继承父进程的 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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、什么是进程
  • 2、进程的生命周期
  • 3、进程的属性
  • 4、使用ps查看进程工具
    • 4.1:常用的参数:
      • 4.2常用的选项组合
        • 4.3对进程的指定列进行排序
          • 4.4不可中断状态
          • 5、找出系统中使用CPU最多的进程
            • 5.1运行top, 找出使用CPU最多的进程,按大写的P,可以按CPU使用率来排序显示
              • 5.2在linux系统中一个进程,最多可以使用100%cpu对吗?
              • 6、Isof查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)
              • 7、进程优先级nice
                • 7.1进程调度及多任务
                  • 7.2相对优先级 nice
                    • 7.3nice启动级别的设置
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档