超详细 Linux 进程管理与工作管理解析与应用(人工翻译命令选项帮助)

时间:2020-8-22 作者:admin


  系统中,程序与命令的执行都通过进程来完成,通过学习Linux的进程管理可以方便地查看与管理计算机执行的任务。尤其是在仅有命令行的系统中,工作管理可以更好地方便管理者进行任务的统筹安排而不需要队列等待。下面,我们就来认识一下Linux的进程管理和工作管理。部分选项说明为命令帮助页面直接翻译(人工),如有错误请见谅。内容较多,Web端读者可用左侧边栏中的目录。

超详细 Linux 进程管理与工作管理解析与应用(人工翻译命令选项帮助)

进程管理

 进程简介

  进程是计算机正在执行的程序或命令,每一个进程都是运行的实体,拥有自己的内存地址空间,并消耗一定的系统资源。服务也通过进程发挥作用。

 进程管理作用

  • 查看计算机健康状态(系统资源占用等)
  • 查看系统中的所有进程
  • 强制结束进程(Kill)

 进程管理命令

 查看进程(ps)

  1. 使用ps命令,这个命令提供两种格式:BSD系统格式和Linux标准命令格式,参数主要介绍Linux标准命令格式(前面都有-

#BSD格式查看所有进程
ps aux
#Linux标准格式查看进程
ps -[options]
#较常用的以长格式(详细信息)查看所有进程,两种都可以
ps -AL
ps -eL

ps命令参数(其他具体参数通过ps --help all命令查看帮助):

基本选项 说明
-A -e all 所有进程
-a 所有通过任何终端设备1进行的进程
-d 所有除了session leader2(不会翻译了……大意是一个会话的主进程)外的进程
-N 表示取反(将条件取非),-Nd表示显示所有session leader

筛选选项,选项后必须跟参数,为指定的具体内容(ID、名称等):

查找选项 说明
-C 指定命令/程序名称
-G 指定用户组(真实用户组)
-g 指定会话(session)或有效组3(effective group)名
-p 指定PID(process id)进程号
-q 指定PID(process id)进程号,并使用快速模式4
-s 指定会话(session)号
-t 指定终端(tty),默认为当前终端
-u 指定有效用户(user),id 或 用户名
-U 指定真实用户

输出格式选项,选择使用什么格式输出以及输出内容

输出格式选项 说明
-F extra full(比长格式增加占用量信息)
-f full(长格式)
-H 以层次体系输出(进程树)
-j 以工作形式输出
-l long(长格式)
-o 指定手动配置格式5

例如,输出一个自定义格式的内容

ps -Ao pid,sid,ppid,c
#以下是返回结果
    PID     SID    PPID  C
   2041    2016    2016  0
   2289    1890    1890  0
   2299    1890    2289  0
   2670    1892    1892  0
 命令返回值

  ps命令返回一个列表,行为符合查询条件(如果有)的进程,列为进程相关的信息

返回值头部标志说明:

头部标志 说明
PPID (Parent Process ID)父进程号
PID (Process ID)进程号
UID (User ID)产生进程的用户名
C CPU占用率
PRI 动态进程优先级(由系统动态更改)
NI 进程优先级修正值(需要时由用户更改)
SZ 使用的内存量
RSS 进程固定占用的内存(常驻内存)
PSR 进程运行的CPU号(核心号)
WCHAN 进程等待的系统资源
STIME 进程开始时间
TIME 进程累计CPU使用时间
CMD 命令名称(命令目录)
  • 其中,NI、PRI选项优先级数字越小优先级越高,对于修正值NI,-20为最高优先修正

 实时查看进程及系统健康状态(top)

  使用top命令,进入一个交互模式

超详细 Linux 进程管理与工作管理解析与应用(人工翻译命令选项帮助)

  界面下半部分与ps命令的返回值相似,但为动态排序显示前几个进程,具体见下文,显示刷新速度默认3秒,可以参数设置

top #不加参数使用默认刷新速率
top -d secs #指定刷新时间(以秒计)

  界面的上半部分同样动态显示了系统的实时健康状态

  • 第一行为任务队列信息

    信息 说明
    3:17:49 up time 系统当前时间
    up 3:34 系统运行时间,格式dd day hh:mm
    1 user 当前登录了一个用户
    load average 平均负载,分别为前1分钟、前5分钟、前15分钟负载(满载为CPU逻辑处理器数量)
  • 第二行为进程信息

    信息 说明
    212 total 共有212个进程
    2 running 有2个进程正在运行
    210 sleeping 有210个进程正在睡眠(无工作未加入处理队列)
    0 stopped 有0个进程已经停止
    0 zombie 有0个进程僵死(僵尸进程),即进程正在关闭中(少部分情况,时间较短)或关闭时遇到阻断无法自行关闭
  • 第三行为CPU占用信息

    信息 说明
    0.0us 用户占用0.0%CPU(指由用户发起的进程)
    0.6sy 系统占用0.6%(指系统进程)
    0.0 ni 优先的用户进程占用0.0%
    99.4 id 空闲部分CPU 99.4%
    0.0 wa 等待系统资源的进程占用0.0%
    0.0 hi 硬中断请求服务占用0.0%
    0.0 si 软中断请求服务占用0.0%
    0.0 st 虚拟时间百分比,如果该系统下有虚拟机,虚拟机的CPU等待真实CPU处理其他虚拟机进程的时间,时间越长
  • 第四行为物理内存信息

    信息 说明
    3912.0 total 共有3912.0MB内存(我怎么记得给了4G,估计硬件保留一点)
    2455.4 free 2496.5MB 内存空闲
    761.4 used 749.6MB内存已使用(Linux内存占用很小,且内存回收机制比较好)
    665.2 buff/cache 内存缓冲有665.2 MB
  • 第五行为交换分区信息

    信息 说明
    3815.0 total 共有3815.0MB交换分区
    3815.0 free 有3815.0MB空间剩余(全空着)
    0.0 used 有0.0MB交换分区被使用
    2872.8 avail mem 有2872.8MB可用等效内存(存疑)
 在交互界面中可以执行的操作

  以下操作可以在交互界面中执行,注意大小写区别

  • 方向键键按下会立即刷新, left right可以移动表格,up down键无用

    ? 或 h 显示帮助
    P 按CPU使用率排序(默认选项)
    M 按内存使用量排序
    N 按PID排序
    q 退出交互界面
  • 其他操作在帮助中,如Z控制显示颜色等,交互设置界面下方均有说明内容,请自行探索


 查看进程树(pstree)

  使用pstree命令可以查看运行的进程树,父子进程的关系较为直观。

pstree -p #一般使用-p选项同时显示PID
  • 其中可能出现2* 3*等字符(不含-p选项时),表示有同样进程名的子进程有2个/3个

 管理进程(kill/killall)

  从名字上看kill命令主要用来强行杀死进程,但事实上不是这样。kill命令可以向一个任务发送一个信号,可以是重启、正常结束、强行停止、恢复运行、暂停等,信号的编号遵循SIGSPEC 信号声明 或SIGNUM编号命名。

kill -s <信号名> PID
kill -n <信号编号> PID
#一般直接使用信号编号,而不记名称

另外,使用-l选项可以列出信号名称

kill -l
 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

下面选几个常用信号介绍,

信号编号 信号名称 说明
1 SIGHUP 使进程立即结束,重新初始化(读取配置文件等)然后重启
2 SIGINT 程序终止信号,用来终止前台的进程,相当于按下ctrl+c
8 SIGFPE 发生致命算数运算错误时会发出
9 SIGKILL 相当于windows系统taskkill命令的\f参数,强制结束程序运行,该信号不能被阻塞、忽略,用于强行停止进程
14 SIGALRM 时钟定时信号,alarm函数使用这个信号
15 SIGTERM 正常结束一个进程的信号,也即非强制停止一个进程,发出信号让其正常关闭
18 SIGCONT 恢复一个已经暂停的进程,信号不能被阻断
19 SIGSTOP 暂停一个前台进程并挂入后台,相当于ctrl + z
  • 一般使用SIGTERM信号来结束进程,部分进程无法用这个信号结束时,使用SIGKILL信号
  • 在不包含信号参数时,kill命令默认使用SIGTERM正常结束信号

  killall命令不是杀死所有进程,只是按进程名来发送信号。对于killall命令不多说明,除了信号名称、对象不同外其他用法与kill相同(信号编号仍然相同)

killall -s <signal> <Process Name>
#注意killall命令使用的是进程名

如果要按终端号结束一个终端上登录用户的所有进程,使用pkill命令

pkill -t <terminal name>


超详细 Linux 进程管理与工作管理解析与应用(人工翻译命令选项帮助)

工作管理

  在系统中支持同时进行多项工作,但只有一个终端用来显示时,使用工作管理命令将不需要交互或暂时不需要输入命令的工作放入后台运行,方便进行统筹安排,提高管理员操作效率

 将工作放入后台

  1. 在命令/程序一开始就将其放入后台运行

    在命令行后加一个&,直接将工作放入后台

    tar -zcf etc.tar.gz /etc &
    #任务会在后台运行,并没有任何输出,也会在后台结束
    
  2. 在命令/程序运行中将其放入后台

      使用快捷键ctrl+z,将工作放入后台并暂停。注意:用这个快捷键将任务放入后台后处于暂停状态,需要手动启动,启动方法在下面介绍

注意:后台运行中的工作如果有输出,会在终端中输出,不影响当前工作,但输出可以在任意位置,某些情况下可能引起看错

 查看在后台中的命令及其状态

  使用jobs命令可以查看所有后台中的工作,方括号中的为工作序号(不是队列号,在工作未结束前这个序号不会变动),在后面的操作中会用到

jobs
[1]-  已停止               vim  (工作目录: ~)
[2]+  已停止               vim test1.sh
#如果这个命令在当前目录中,则不会显示,否则会显示其工作目录
jobs -l #显示工作的PID,而不是工作名称

其中:+表示放入后台的最后一个工作,如果恢复将默认恢复它,-表示放入后台的倒数第二个工作,其他工作没有标识

 将后台的工作恢复

  1. 将后台的工作恢复到前台进行,使用fg命令

    fg %n #n为工作序号,在jobs命令查看后台工作处找到
    #其中%也可以不加
    
  2. 将后台暂停的工作在后台恢复执行,使用bg命令,语法与fg相同

    注意:交互式命令不能在后台运行,交互式命令的目的是与使用者进行交互,没有前台交互,命令失去意义,所以不会运行。


  1. 终端设备是用户开启的交互式系统,TTY是所有终端设备的统称;同时,tty也表示本地登录的终端。tty1-6表示命令行终端,tty7表示图形化终端。从图形化界面打开的终端一般为终端模拟器,即虚拟终端。虚拟终端用pty表示,而pts是其实现方式,所以在ps命令中虚拟终端的进程标识为pts。当系统打开一个虚拟终端,则自动按照pts/n序号排序 ↩︎

  2. 当一个进程的PID与SID相同,这个进程就是该会话的session leader,一般session leader下会有子进程,带有状态标识符s ↩︎

  3. 有效用户与有效组的相关内容在我的另一篇博客Linux特殊文件权限属性 SetUID 、 SetGID 和 Sticky BIT 介绍及应用中有介绍 ↩︎

  4. 在快速模式中, 命令会忽略所有其他筛选类选项,查询速度大大加快。普通模式中,其他筛选类选项条件同时生效,可能会出现找不到进程或者显示全部进程的问题(-Ap 同时使用,-A(即-e)选项优先级较-p高,会覆盖原来的筛选条件) ↩︎

  5. 手动配置输出格式时,将要输出的列(具体名称在下面的返回值介绍中)名称小写用逗号分隔写出 ↩︎

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。