新普京网站-澳门新普京 > 前端 > RHEL7进程管理,进程你所需要知道的一切

RHEL7进程管理,进程你所需要知道的一切

2019/12/29 18:30

在这篇指南中,我们会逐步对进程做基本的了解,然后简要看看如何用特定命令管理 Linux 进程。

进程概念

名称 说明
程序 一组指令的集合
进程 程序的执行就是进程也可以把进程看成一个独立的程序
在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己
进程是资源分配的基本单位,也是调度运行的基本单位
线程 线程被人们认为是轻量级的进程,它是进程中单独运行的程序

一个进程可以包含多个线程且至少有一个主线程,同一进程的线程共享该进程的代码和数据

图片 1

进程process是指正在执行的程序;是程序正在运行的一个实例。它由程序指令,和从文件、其它程序中读取的数据或系统用户的输入组成。

程序和进程的区别

  • 程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程
  • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程
  • 进程还具有并发性和交往性,而程序却是封闭的

进程的类型

在 Linux 中主要有两种类型的进程:

  • 前台进程(也称为交互式进程) – 这些进程由终端会话初始化和控制。换句话说,需要有一个连接到系统中的用户来启动这样的进程;它们不是作为系统功能/服务的一部分自动启动。
  • 后台进程(也称为非交互式/自动进程) – 这些进程没有连接到终端;它们不需要任何用户输入。

进程和线程的区别

  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
  • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行

什么是守护进程daemon

这是后台进程的特殊类型,它们在系统启动时启动,并作为服务一直运行;它们不会死亡。它们自发地作为系统任务启动(作为服务运行)。但是,它们能被用户通过 init 进程控制。

图片 2

Linux 进程状态

进程属性

图片 3

在 Linux 中创建进程

当现有的进程在内存中完全拷贝一份自身的时候就会创建出一个新的进程。子进程会有和父进程一样的环境,只有进程 ID 不同。

在 Linx 中有两种常规方式创建进程:

  • 使用 system() 函数 – 这个方法相对简单,但是比较低效而且具有明显的安全隐患。
  • 使用 fork() 和 exec() 函数 – 这个技巧比较高级但提供更好的灵活性、速度以及安全性。

进程管理工具

对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill

Linux 如何识别进程?

由于 Linux 是一个多用户系统,意味着不同的用户可以在系统上运行各种各样的程序,内核必须唯一标识程序运行的每个实例。

程序由它的进程 ID(PID)和它父进程的进程 ID(PPID)识别,因此进程可以被分类为:

  • 父进程 – 这些是在运行时创建其它进程的进程。
  • 子进程 – 这些是在运行时由其它进程创建的进程。

静态查看进程

命令:ps
作用:查看系统进程( 静态查看
语法:ps [选项]

选项 说明
-a 显示所有用户的进程
-u 显示用户名和启动时间
-x 显示没有控制终端的进程
-e 显示所有进程,包括没有控制终端的进程
-l 长格式显示
-w 宽行显示,可以使用多个w进行加宽显示

我们常用的选项是组合是aux
查看隶属于自己的进程

[root@VM_200_13_centos ~]# ps -u
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root      1275  0.0  0.0   6452   804 ttyS0    Ss+  Aug15   0:00 /sbin/agetty --keep-baud 115200 3
root      1276  0.0  0.0 110032   856 tty1     Ss+  Aug15   0:00 /sbin/agetty --noclear tty1 linux
root      2828  0.0  0.2  12684  2888 pts/0    Ss   14:33   0:00 -bash
root      2979  0.0  0.1  35888  1476 pts/0    R+   14:34   0:00 ps -u

查看所有用户的进程和没有控制终端的进程

[root@VM_200_13_centos ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.7  44800  7272 ?        Ss   Aug15   0:22 /usr/lib/systemd/systemd --switch
root         2  0.0  0.0      0     0 ?        S    Aug15   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    Aug15   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   Aug15   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S    Aug15   0:00 [migration/0]
root         8  0.0  0.0      0     0 ?        S    Aug15   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S    Aug15   0:00 [rcuob/0]
root        10  0.0  0.0      0     0 ?        R    Aug15   0:03 [rcu_sched]
root        11  0.0  0.0      0     0 ?        S    Aug15   0:06 [rcuos/0]
root        12  0.0  0.0      0     0 ?        S    Aug15   0:00 [watchdog/0]
root        13  0.0  0.0      0     0 ?        S<   Aug15   0:00 [khelper]
...

ps -aux输出解释:

名称 说明
USER 进程所有者
PID 进程ID
%CPU 占用的CPU使用率
%MEM 占用的内存使用率
VSZ 占用的虚拟内存大小
RSS 占用的内存大小
TTY 终端的次要装置号码 (minor device number of tty)
STAT 进程状态
START 启动进程的时间
TIME 进程消耗CPU的时间
COMMAND 命令的名称和参数

进程状态:

状态 说明
D 无法中断的休眠状态(通常为IO进程)
R 正在运行,在可中断队列中
S 处于休眠状态,静止状态
T 停止或被追踪,暂停执行
W 进入内存交换(从内核2.6开始无效)
X 死掉的进程
Z 僵尸进程不存在但暂时无法消除
< 高优先级进程
N 低优先级进程
L 有记忆体分页分配并锁在记忆体内
s 进程的领导者(在它之下有子进程)
l 多进程的
+ 位于后台的进程组

查看nginx进程

[root@VM_200_13_centos ~]# ps -aux | grep nginx
root      5092  0.0  0.0   9036   672 pts/0    R+   15:07   0:00 grep --color=auto nginx
root     17698  0.0  0.0  20468   604 ?        Ss   Aug15   0:00 nginx: master process nginx
nginx    17699  0.0  0.1  22980  1612 ?        S    Aug15   0:00 nginx: worker process

init 进程

init 进程是系统中所有进程的父进程,它是启动 Linux 系统后第一个运行的程序;它管理着系统上的所有其它进程。它由内核自身启动,因此理论上说它没有父进程。

init 进程的进程 ID 总是为 1。它是所有孤儿进程的收养父母。(它会收养所有孤儿进程)。

动态查看进程

命令:top
作用:动态 显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
语法:top [选项]
说明:默认3s刷新一次,按空格立即刷新,按q退出,按大写M则根据内存排序,按P则根据CPU排序

选项 说明
-b 批处理
-c 显示完整的治命令
-I 忽略失效过程
-s 保密模式
-S 累积模式
-i 设置间隔时间
-u 指定用户名
-p 指定进程
-n 循环显示的次数
top - 15:58:43 up 2 days, 14:09,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  77 total,   3 running,  74 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.5 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016916 total,   533700 free,    90484 used,   392732 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   768064 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                       
    1 root      20   0   44900   7360   2364 S  0.0  0.7   0:23.01 systemd                       
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                      
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.56 ksoftirqd/0                   
    5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H                  
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0                   
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh                        
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcuob/0                       
   10 root      20   0       0      0      0 S  0.0  0.0   0:03.61 rcu_sched                     
   11 root      20   0       0      0      0 R  0.0  0.0   0:06.97 rcuos/0                       
   12 root      rt   0       0      0      0 S  0.0  0.0   0:00.14 watchdog/0                    
   13 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 khelper                       
   14 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs                     
   15 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns                         
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 perf                          
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback                     
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd                   
   19 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset                        
   20 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kblockd                       
   21 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 md                            
   26 root      20   0       0      0      0 S  0.0  0.0   0:00.03 khungtaskd                    
   27 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kswapd0                       
   28 root      25   5       0      0      0 S  0.0  0.0   0:00.00 ksmd                          
   29 root      39  19       0      0      0 S  0.0  0.0   0:00.56 khugepaged                    
   30 root      20   0       0      0      0 S  0.0  0.0   0:00.00 fsnotify_mark                 
   31 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 crypto                        
   39 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kthrotld                      
   41 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kmpath_rdacd                  
   42 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kpsmoused                     
   43 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 ipv6_addrconf                 
   63 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 deferwq                       
  101 root      20   0       0      0      0 S  0.0  0.0   0:00.18 kauditd                       
  213 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 ata_sff

前五行是当前系统情况整体的统计信息区,下面我们看每一行信息的具体意义

第一行:任务队列信息

字段 说明
15:58:43 Item Two
up 2 days, 14:09 系统已经运行了2天14小时9分钟
1 users 当前登录用户数
load average: 0.00, 0.01, 0.05 系统负载,即任务队列的平均长度
三个数值分别为:1分钟、5分钟、15分钟前到现在的平均值

第二行:进程信息

字段 说明
77 total 进程总数
3 running 正在运行的进程数
74 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数

第三行:CPU信息(如果有多个CPU的话信息会超过两行)

字段 说明
0.2 us 系统用户进程使用CPU百分比
0.2 sy 内核中的进程占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.5 id 空闲CPU百分比
0.1 wa IO等待占用CPU的百分比
0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
0.0 si 软中断(Software Interrupts)占用CPU的百分比
0.0 st 虚拟机偷取时间

第四行:内存信息

字段 说明
1016916 total 物理内存总量
533700 free 空闲内存总量
90484 used 使用的物理内存总量
392732 buff/cache 用作内核缓存的内存量
和命令free –k一个意思

第五行:交换区信息

字段 说明
0 total 交换区总量
0 free 空闲交换区总量
0 used 使用的交换区总量
768064 avail Mem 总的可利用内存是多少

剩下的则是进程信息:

字段 说明
PID 进程ID
USER 进程所有者
PR 进程优先级
NI nice值,负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb,VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb,RES=CODE+DATA
SHR 共享内存大小,单位kb
S 进程状态
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 进程名称(命令名/命令行)

查找进程 ID

你可以用 pidof 命令查找某个进程的进程 ID:

# pidof systemd
# pidof top
# pidof httpd

图片 4

查找 Linux 进程 ID

要查找当前 shell 的进程 ID 以及它父进程的进程 ID,可以运行:

$ echo $$
$ echo $PPID

图片 5

查找 Linux 父进程 ID

查找某个服务的进程号

[root@VM_200_13_centos ~]# pgrep ssh
697
8435

在 Linux 中启动进程

每次你运行一个命令或程序(例如 cloudcmd – CloudCommander),它就会在系统中启动一个进程。你可以按照下面的方式启动一个前台(交互式)进程,它会被连接到终端,用户可以发送输入给它:

# cloudcmd

图片 6

启动 Linux 交互进程

以树状图显示进程间的关系

命令:pstree
作用:以树状图显示进程,只显示进程的名字,且相同进程合并显示
语法:pstree [选项]

选项 说明
-a 显示命令行参数
-A 使用ASCII字符线
-c 不适用紧凑连接方式显示
-h 高亮所有的进程和其父进程的PID
-H 高亮指定的进程和其父进程的PID
-g 显示进程所属的用户组ID
-G 使用VT100字符线
-n 根据PID排序
-p 显示PID
-s 显示父进程
[root@VM_200_13_centos ~]# pstree -p
systemd(1)-+-acpid(474)
           |-agetty(1275)
           |-agetty(1276)
           |-atd(472)
           |-auditd(430)---{auditd}(448)
           |-barad_agent(1938)-+-barad_agent(1939)
           |                   `-barad_agent(1940)-+-{barad_agent}(1941)
           |                                       `-{barad_agent}(2009)
           |-chronyd(477)
           |-crond(473)
           |-dbus-daemon(454)
           |-lsmd(452)
           |-lvmetad(357)
           |-nginx(17698)---nginx(17699)
           |-rsyslogd(469)-+-{rsyslogd}(485)
           |               `-{rsyslogd}(486)
           |-sap1002(1853)
           |-sap1007(1861)
           |-secu-tcs-agent(1153)---sap1004(1859)
           |-sgagent(1922)---{sgagent}(1923)
           |-sshd(697)---sshd(8435)---bash(8437)---pstree(11096)
           |-systemd-journal(329)
           |-systemd-logind(458)
           |-systemd-udevd(359)
           `-tuned(695)-+-{tuned}(1329)
                        |-{tuned}(1330)
                        |-{tuned}(1332)
                        `-{tuned}(1335)
上一篇:每天一个 下一篇:没有了