Linux进程管理

Linux进程管理

1.进程基本概述

进程是已启动的可执行文件的运行实例。

[En]

A process is a running instance of an executable that has been started.

/proc目录下以数字为名的目录,每一个目录代表一个进程,保存着进程的属性信息。每一个进程的PID是唯一的,就算进程退出了,其它进程也不会占用其PID。

1.1进程的组成部分

1.1.1 已分配内存的地址空间
1.1.2 安全属性,包括所有权凭据和特权
1.1.3 程序代码的一个或多个执行线程
1.1.4 进程状态

1.2进程的环境

1.2.1 本地和全局变量
1.2.2 当前调度上下文
1.2.3 分配的系统资源,如文件描述符和网络端口

1.3进程的产生

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

Linux进程管理
通过fork例程,子进程继承安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec其自己的程序代码。通常,父进程在子进程运行期间处于睡眠状态,设置一个在子进程完成时发出信号的请求(wait)。在退出时,子进程可能已经关闭或丢弃了其资源和环境,剩余的部分被称作僵停。父进程在子进程退出时收到信号而被唤醒,清理剩余结构,然后继续执行其自己的程序代码。

1.4进程的分类

1.4.1 前台进程:与终端相关的进程,通过终端启动的进程
注意:在前台启动的进程也可以发送到后台以在守护程序模式下运行

[En]

Note: processes started in the foreground can also be sent to the background to run in daemon mode

1.4.2 守护进程:daemon,与终端无关的进程(如内核),在系统引导过程中启动的进程

2.进程状态

Linux进程管理

Excuting 运行态 Ready 就绪态,也可以称作睡眠态 Uninterruptible sleep 不可中断的睡眠。不可随时唤醒,只有当IO资源加载成功后才能唤醒 Interruptible sleep 可中断的睡眠。可随时唤醒 Zombie 僵尸进程。正常运行结束了,但是不释放占据的内存 Stopped 停止态,暂停于内存中,但不会被调度,除非手动启动之

进程睡眠的原因:
当一个执行中的进程,需要加载额外的IO资源的时候,由于IO设备的速度太慢,所以会转入睡眠状态等待,交出CPU给其他进程,以免浪费剩余执行时间

Linux进程状态

标志 内核定义的状态名称和描述 R TASK_RUNNING:进程正在CPU上执行,或者正在等待运行。处于运行中(或可运行)状态时,进程可能正在执行用户例程或内核例程(系统调用),或者已排队并就绪 S TASK_INTERRUPTIBLE:进程处于睡眠状态且正在等待某一条件:硬件请求、系统资源访问或信号。当事件或信号满足该条件时,该进程将返回到运行中 D TASK_UNINTERRUPTIBLE:此进程也在睡眠,但与S状态不同,不会响应传递的信号。仅在特定的条件下使用,其中进程中断可能会导致意外的设备状态 K TASK_KILLABLE:进程处于睡眠状态,与不可中断的D状态相同,但有所修改,允许等待中的任务通过响应信号而被中断(彻底退出)。实用程序通常将可中断的进程显示为D状态 T TASK_STOPPED:进程已被停止(暂停),通常是通过用户或其他进程发出的信号。进程可以通过另一信号返回到运行中状态,继续执行(恢复) T TASK_TRACED:正在被调试的进程也会临时停止,并且共享同一个T状态标志 Z EXIT_ZOMBIE:子进程在退出时向父进程发出信号。除进程身份(PID)之外的所有资源都已释放 X EXIT_DEAD:当父进程清理(获取)剩余的子进程结构时,进程现在已彻底释放。此状态从不会在进程列出实用程序中看到 < 高优先级进程 N 低优先级进程 + 前台进程组中的进程 l 多线程进程 s 会话进程首进程

3.进程优先级

3.1Linux进程调度与多任务

3.1.1 现代计算机系统中既包含每次只能执行一个指令的低端处理器,也包含高性能超级计算机,这些超级计算机每台配备数百个CPU,每个CPU上具有多个核心,它们可以并行执行数以百计的指令。但是所有这些系统往往具有一个共同点:它们需要运行的进程数量总是超出实际具有的核心数。

3.1.2 通过时间分片技术,Linux(和其他操作系统)实际能够运行的进程数(和线程数)可以超出可用的实际处理单元数。操作系统进程调度程序将在单个核心上的进程之间进行快速切换,从而给用户一种有多个进程在同时运行的印象。

3.1.3 执行此切换的Linux内核部分称为进程调度程序。

3.2进程优先级

进程优先级范围:0-139,数字越小,优先级越高
0-99:实时优先级,内核调整
100-139:静态优先级,用户可控制
进程优先级高的特点:
获得更多的CPU运行时间
更优先获得CPU运行的机会
要修改进程的优先级可以通过调整进程的nice值来实现,nice值越小,优先级越高:
nice值的范围是(-20,19),-20对应100,19对应139

3.3相对优先级

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

3.3.2 由于并非所有进程都以同样的方式创建,可为采用SCHED_NORMAL策略运行的进程指定相对优先级。此优先级称为进程的nice值。一个进程可以有40种不同级别的nice值。

3.3.3 这些nice级别的范围是从-20到19。默认情况下,进程将继承其父进程的nice级别,通常为0

nice级别越高,表示优先级越低(该进程容易将其CPU使用量让给其他进程)
nice级别越低,表示优先级越高(该进程更加不倾向于让出CPU)
如果不存在资源争用(例如当活动进程数少于可用CPU核心数时),即使nice级别高的进程也将仍使用它们可使用的所有可用CPU资源。但当请求CPU时间的进程数超过可用核心数时,nice级别较高的进程将比nice级别较低的进程收到更少的CPU时间

3.4nice级别与权限

为很占CPU资源的进程设置较低的nice级别可能会对同一系统上运行的其他进程的性能造成负面影响,所以仅允许root用户设置负nice级别以及降低现有进程的nice级别。
普通非特权用户仅允许设置正的nice级别。只能对现有进程提升nice级别,而不能降低nice级别。

3.5进程优先级调整

进程优先级调整:调整nice值
//调整已经启动的进程的nice值:
renice NI PID(例:renice 3 3704)
//在启动时指定nice值:(-20,19)
nice -n NI COMMAND

[root@lnh ~]# sleep 50000
//&#x5728;&#x53E6;&#x4E00;&#x4E2A;&#x7EC8;&#x7AEF;&#x6267;&#x884C;&#x7684;
[root@lnh ~]# ps -elf |grep sleep
0 S root       10147   10097  0  80   0 - 54261 hrtime 01:59 pts/2    00:00:00 sleep 50000
0 S root       10149    9955  0  80   0 - 55475 -      01:59 pts/0    00:00:00 grep --color=auto sleep
[root@lnh ~]# renice -20 10147
10147 (process ID) old priority 0, new priority -20
[root@lnh ~]# ps -elf |grep sleep
0 S root       10147   10097  0  60 -20 - 54261 hrtime 01:59 pts/2    00:00:00 sleep 50000
0 S root       10152    9955  0  80   0 - 55475 -      02:00 pts/0    00:00:00 grep --color=auto sleep
[root@lnh ~]# nice -n -10 sleep  50000
[root@lnh ~]# ps -elf |grep sleep
4 S root       10120   10097  0  70 -10 - 54261 hrtime 01:51 pts/2    00:00:00 sleep 50000
0 S root       10132    9955  0  80   0 - 55475 -      01:52 pts/0    00:00:00 grep --color=auto sleep

4.进程命令

Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

4.1 ps

  1. ps(process state)命令用于列出当前的进程。可以显示详细的进程信息,包括:

1.1 用户识别符(UID),它确定进程的特权
1.2 唯一进程识别符(PID)
1.3 CPU和已经花费的实时时间
1.4 进程在各种位置上分配的内存数量
1.5 进程的位置STDOUT,称为控制终端
1.6 当前的进程状态
2. ps支持三种选项格式:

2.1 UNIX(POSIX)选项,可以分组但必须以连字符开头
2.2 BSD 选项,可以分组但不可与连字符同用
2.3 GNU 长选项,以双连字符开头
3. ps(process state),显示进程信息。注意事项:

3.1 加了[]中括号的,表示内核线程,通常位于顶部
3.2 exiting或defunct表示僵尸进程
4. 常用选项
a,u,x

[root@lnh ~]# ps aux |head
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.7 244780 13692 ?        Ss   Jul02   0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2  0.0  0.0      0     0 ?        S    Jul02   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   Jul02   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   Jul02   0:00 [rcu_par_gp]
root           6  0.0  0.0      0     0 ?        I<   Jul02   0:00 [kworker/0:0H-kblockd]
root           9  0.0  0.0      0     0 ?        I<   Jul02   0:00 [mm_percpu_wq]
root          10  0.0  0.0      0     0 ?        S    Jul02   0:00 [ksoftirqd/0]
root          11  0.1  0.0      0     0 ?        I    Jul02   4:02 [rcu_sched]
root          12  0.0  0.0      0     0 ?        S    Jul02   0:00 [migration/0]
[root@lnh ~]# ps aux |grep sleep
root       10078  0.0  0.0 217044   788 pts/2    S+   01:43   0:00 sleep 20000
root       10082  0.0  0.0 221900  1036 pts/0    S+   01:43   0:00 grep --color=auto sleep
//a&#x663E;&#x793A;&#x6240;&#x6709;&#x4E0E;&#x7EC8;&#x7AEF;&#x6709;&#x5173;&#x7684;&#x8FDB;&#x7A0B;,u&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x662F;&#x7531;&#x54EA;&#x4E2A;&#x7528;&#x6237;&#x542F;&#x52A8;&#x7684;,x&#x663E;&#x793A;&#x6240;&#x6709;&#x4E0E;&#x7EC8;&#x7AEF;&#x65E0;&#x5173;&#x7684;&#x8FDB;&#x7A0B;
//USER:&#x7528;&#x6237; PID:&#x8FDB;&#x7A0B;id %CPU:CPU&#x4F7F;&#x7528;&#x7387; %MEM:&#x5185;&#x5B58;&#x4F7F;&#x7528;&#x7387; VSZ&#xFF1A;&#x865A;&#x62DF;&#x5185;&#x5B58;&#x96C6;
RSS:&#x5E38;&#x9A7B;&#x5185;&#x5B58;&#x96C6; TTY:&#x5728;&#x54EA;&#x91CC;&#x767B;&#x5F55;&#x7684;&#xFF08;?&#x5F00;&#x673A;&#x81EA;&#x542F;,&#x8FDC;&#x7A0B;&#x8FDE;&#x4E0A;&#x53BB;&#x6572;&#x7684;&#x547D;&#x4EE4;&#x662F;&#x6709;&#x4F4D;&#x7F6E;&#x7684;eg&#xFF1A;pts/2&#xFF09; STAT:&#x8FDB;&#x7A0B;&#x72B6;&#x6001; TIME:&#x8FD0;&#x884C;&#x65F6;&#x7684;&#x7D2F;&#x79EF;&#x65F6;&#x957F; START:&#x542F;&#x52A8;&#x65F6;&#x95F4; COMMAND:&#x6267;&#x884C;&#x7684;&#x547D;&#x4EE4;

-e ,-l,-f,-F,-H,-o

[root@lnh ~]# ps -el |head
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0       1       0  0  80   0 - 61195 do_epo ?        00:00:05 systemd
1 S     0       2       0  0  80   0 -     0 -      ?        00:00:00 kthreadd
1 I     0       3       2  0  60 -20 -     0 -      ?        00:00:00 rcu_gp
1 I     0       4       2  0  60 -20 -     0 -      ?        00:00:00 rcu_par_gp
1 I     0       6       2  0  60 -20 -     0 -      ?        00:00:00 kworker/0:0H-kblockd
1 I     0       9       2  0  60 -20 -     0 -      ?        00:00:00 mm_percpu_wq
1 S     0      10       2  0  80   0 -     0 -      ?        00:00:00 ksoftirqd/0
1 I     0      11       2  0  80   0 -     0 -      ?        00:04:06 rcu_sched
1 S     0      12       2  0 -40   - -     0 -      ?        00:00:00 migration/0
//-e&#x663E;&#x793A;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x4E0E;-A&#x6548;&#x679C;&#x76F8;&#x540C;,-l&#x4EE5;&#x957F;&#x683C;&#x5F0F;&#x663E;&#x793A;
[root@lnh ~]# ps -elf |head
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root           1       0  0  80   0 - 61195 do_epo Jul02 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
1 S root           2       0  0  80   0 -     0 -      Jul02 ?        00:00:00 [kthreadd]
1 I root           3       2  0  60 -20 -     0 -      Jul02 ?        00:00:00 [rcu_gp]
1 I root           4       2  0  60 -20 -     0 -      Jul02 ?        00:00:00 [rcu_par_gp]
1 I root           6       2  0  60 -20 -     0 -      Jul02 ?        00:00:00 [kworker/0:0H-kblockd]
1 I root           9       2  0  60 -20 -     0 -      Jul02 ?        00:00:00 [mm_percpu_wq]
1 S root          10       2  0  80   0 -     0 -      Jul02 ?        00:00:00 [ksoftirqd/0]
1 I root          11       2  0  80   0 -     0 -      Jul02 ?        00:04:06 [rcu_sched]
1 S root          12       2  0 -40   - -     0 -      Jul02 ?        00:00:00 [migration/0]
//-e&#x663E;&#x793A;&#x6240;&#x6709;&#x8FDB;&#x7A0B;&#xFF0C;&#x4E0E;-A&#x6548;&#x679C;&#x76F8;&#x540C;,-l&#x4EE5;&#x957F;&#x683C;&#x5F0F;&#x663E;&#x793A;,-f&#x663E;&#x793A;&#x66F4;&#x8BE6;&#x7EC6;&#x7684;&#x5B8C;&#x6574;&#x683C;&#x5F0F;&#x7684;&#x8FDB;&#x7A0B;&#x4FE1;&#x606F;.  &#x663E;&#x793A;&#x5168;&#x90E8;&#x4FE1;&#x606F;
[root@lnh ~]# ps -elF |head
F S UID          PID    PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
4 S root           1       0  0  80   0 - 61195 do_epo 13692   1 Jul02 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
1 S root           2       0  0  80   0 -     0 -          0   0 Jul02 ?        00:00:00 [kthreadd]
1 I root           3       2  0  60 -20 -     0 -          0   0 Jul02 ?        00:00:00 [rcu_gp]
1 I root           4       2  0  60 -20 -     0 -          0   0 Jul02 ?        00:00:00 [rcu_par_gp]
1 I root           6       2  0  60 -20 -     0 -          0   0 Jul02 ?        00:00:00 [kworker/0:0H-kblockd]
1 I root           9       2  0  60 -20 -     0 -          0   0 Jul02 ?        00:00:00 [mm_percpu_wq]
1 S root          10       2  0  80   0 -     0 -          0   0 Jul02 ?        00:00:00 [ksoftirqd/0]
1 I root          11       2  0  80   0 -     0 -          0   2 Jul02 ?        00:04:06 [rcu_sched]
1 S root          12       2  0 -40   - -     0 -          0   0 Jul02 ?        00:00:00 [migration/0]
//-F&#x663E;&#x793A;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;
[root@lnh ~]# ps -H
    PID TTY          TIME CMD
   9955 pts/0    00:00:00 bash
  10185 pts/0    00:00:00   ps
  //-H&#x4EE5;&#x8FDB;&#x7A0B;&#x5C42;&#x7EA7;&#x683C;&#x5F0F;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x76F8;&#x5173;&#x4FE1;&#x606F;
[root@lnh ~]# ps -o pid,comm,ni
    PID COMMAND          NI
   9955 bash              0
  10196 ps                0
//&#x8868;&#x793A;&#x53EA;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x53F7;&#xFF0C;&#x547D;&#x4EE4;&#xFF0C;nice&#x503C;&#x4E09;&#x4E2A;&#x5B57;&#x6BB5;

4.2pstree

pstree用于显示当前系统上的进程树
Linux由2棵树组成:

  1. 进程树
  2. 文件系统挂载树
[root@lnh ~]# pstree
systemd&#x2500;&#x252C;&#x2500;NetworkManager&#x2500;&#x2500;&#x2500;2*[{NetworkManager}]
        &#x251C;&#x2500;auditd&#x2500;&#x2500;&#x2500;{auditd}
        &#x251C;&#x2500;crond
        &#x251C;&#x2500;dbus-daemon&#x2500;&#x2500;&#x2500;{dbus-daemon}
        &#x251C;&#x2500;firewalld&#x2500;&#x2500;&#x2500;{firewalld}
        &#x251C;&#x2500;irqbalance&#x2500;&#x2500;&#x2500;{irqbalance}
        &#x251C;&#x2500;login&#x2500;&#x2500;&#x2500;bash
        &#x251C;&#x2500;polkitd&#x2500;&#x2500;&#x2500;7*[{polkitd}]
        &#x251C;&#x2500;rhsmcertd
        &#x251C;&#x2500;rngd&#x2500;&#x2500;&#x2500;{rngd}
        &#x251C;&#x2500;sshd&#x2500;&#x252C;&#x2500;sshd&#x2500;&#x2500;&#x2500;sshd&#x2500;&#x2500;&#x2500;bash&#x2500;&#x2500;&#x2500;pstree
        &#x2502;      &#x2514;&#x2500;sshd&#x2500;&#x2500;&#x2500;sshd&#x2500;&#x2500;&#x2500;bash
        &#x251C;&#x2500;sssd&#x2500;&#x252C;&#x2500;sssd_be
        &#x2502;      &#x2514;&#x2500;sssd_nss
        &#x251C;&#x2500;systemd&#x2500;&#x2500;&#x2500;(sd-pam)
        &#x251C;&#x2500;systemd-journal
        &#x251C;&#x2500;systemd-logind
        &#x251C;&#x2500;systemd-udevd
        &#x2514;&#x2500;tuned&#x2500;&#x2500;&#x2500;3*[{tuned}]
//&#x6CE8;&#x610F;&#xFF1A;&#x6B64;&#x547D;&#x4EE4;&#x9700;&#x8981;&#x5B89;&#x88C5;psmisc

4.3pgrep

以grep风格指定只显示哪些进程,在当前系统中找符合某些特性的进程。只显示进程号

[root@lnh ~]# pgrep sleep
10239
[root@lnh ~]# pgrep sssd
897
909
910
[root@lnh ~]# pgrep systemd
1
728
755
914
1468
[root@lnh ~]# ps -elf |grep systemd
4 S root           1       0  0  80   0 - 61195 do_epo Jul02 ?        00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
4 S root         728       1  0  80   0 - 23519 do_epo Jul02 ?        00:00:01 /usr/lib/systemd/systemd-journald
4 S root         755       1  0  80   0 - 27547 do_epo Jul02 ?        00:00:01 /usr/lib/systemd/systemd-udevd
4 S dbus         895       1  0  80   0 - 21222 do_epo Jul02 ?        00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
4 S root         914       1  0  80   0 - 24697 do_epo Jul02 ?        00:00:00 /usr/lib/systemd/systemd-logind
4 S root        1468       1  0  80   0 - 23473 do_epo Jul02 ?        00:00:00 /usr/lib/systemd/systemd --user
0 S root       10236    9955  0  80   0 - 55475 -      02:23 pts/0    00:00:00 grep --color=auto systemd
//&#x663E;&#x793A;systemd&#x7684;&#x8BE6;&#x7EC6;&#x4FE1;&#x606F;

4.4pidof

根据进程名查找其PID号

[root@lnh ~]# pidof sleep
10242
[root@lnh ~]# pidof systemd
1471 1468 1

4.5 vmstat

虚拟内存状态查看命令

[root@lnh ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1037184  27628 468768    0    0     1     5   17   29  0  0 100  0  0
[root@lnh ~]# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1037696  27628 468768    0    0     1     5   17   29  0  0 100  0  0
 0  0      0 1037688  27628 468768    0    0     0     0   57   99  0  0 100  0  0
^C
//&#x8868;&#x793A;&#x6BCF;2&#x79D2;&#x5237;&#x65B0;&#x4E00;&#x6B21;
[root@lnh ~]# vmstat 2 2
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 1037436  27628 468768    0    0     1     5   17   29  0  0 100  0  0
 0  0      0 1037436  27628 468768    0    0     0     0   74  113  0  0 100  0  0
//&#x8868;&#x793A;&#x6BCF;2&#x79D2;&#x5237;&#x65B0;&#x4E00;&#x6B21;,&#x5237;&#x65B0;2&#x6B21;&#x540E;&#x9000;&#x51FA;
//procs(process)&#x8FDB;&#x7A0B; r:&#x6B63;&#x5728;&#x8FD0;&#x884C;&#x7684;&#x8FDB;&#x7A0B;&#x4E2A;&#x6570;.b:&#x7761;&#x7720;&#x72B6;&#x6001; memory&#x5185;&#x5B58;   cache:&#x7F13;&#x5B58; buff&#xFF1A;&#x7F13;&#x51B2; free:&#x53EF;&#x4EE5;&#x7528;&#x7684;&#x5269;&#x4F59;&#x7A7A;&#x95F4; swpd:&#x4EA4;&#x6362;&#x7A7A;&#x95F4;(&#x7528;&#x4E86;&#x591A;&#x5C11;)  swap:&#x4EA4;&#x6362;&#x7A7A;&#x95F4;(&#x6362;&#x8FDB;&#x6362;&#x51FA;&#x7684;&#x6570;&#x91CF;)&#x5F53;&#x4F60;&#x7684;&#x7269;&#x7406;&#x5185;&#x5B58;&#x5C31;&#x662F;&#x771F;&#x5B9E;&#x5185;&#x5B58;&#x4E0D;&#x591F;&#x7528;&#x7684;&#x65F6;&#x5019;&#xFF0C;&#x628A;&#x786C;&#x76D8;&#x7684;&#x7A7A;&#x95F4;&#x62FF;&#x4E00;&#x90E8;&#x5206;&#x51FA;&#x6765;&#x5F53;&#x4E00;&#x4E2A;&#x5047;&#x5185;&#x5B58;(&#x4E0D;&#x80FD;&#x771F;&#x6B63;&#x8FD0;&#x884C;)&#x4E34;&#x65F6;&#x4F5C;&#x4E00;&#x4E2A;&#x7F13;&#x51B2;&#x70B9;&#xFF0C;&#x53EF;&#x4EE5;&#x628A;&#x771F;&#x5B9E;&#x5185;&#x5B58;&#x91CC;&#x9762;&#x4E0D;&#x7ECF;&#x5E38;&#x7528;&#x7684;&#x53EF;&#x4EE5;&#x653E;&#x8FDB;&#x8FD9;&#x4E2A;&#x5047;&#x5185;&#x5B58;&#x91CC;&#x9762;&#xFF0C;&#x8BA9;&#x591A;&#x7684;&#x7A7A;&#x95F4;&#x8BA9;&#x5176;&#x4ED6;&#x4E1C;&#x897F;&#x53BB;&#x8FD0;&#x884C;&#xFF0C;&#x8FD0;&#x884C;&#x901F;&#x5EA6;&#x8FD8;&#x662F;&#x6BD4;&#x786C;&#x76D8;&#x5FEB;swap si so&#x5C31;&#x662F;&#x8FD9;&#x4E2A;&#x8FC7;&#x7A0B;&#xFF0C;&#x5728;&#x5047;&#x5185;&#x5B58;&#x7684;&#x89D2;&#x5EA6;   io&#x786C;&#x76D8; bi:&#x8C03;&#x5165;bo:&#x8C03;&#x51FA; &#x5728;&#x5185;&#x5B58;&#x7684;&#x89D2;&#x5EA6;   in:&#x53EF;&#x4E2D;&#x65AD;&#x7761;&#x7720;
cs:&#x4E0A;&#x4E0B;&#x6587;&#x5207;&#x6362;(&#x628A;&#x8FDB;&#x7A0B;&#x8C03;&#x5165;&#x5185;&#x5B58;&#x91CC;&#x9762;&#x8FD0;&#x884C;&#x7136;&#x540E;&#x53C8;&#x8C03;&#x51FA;&#x53BB;)&#x6570;&#x503C;&#x7279;&#x522B;&#x5927;&#x7684;&#x65F6;&#x5019;&#x53EF;&#x4EE5;&#x901A;&#x8FC7;&#x52A0;cpu&#x7684;&#x65B9;&#x5F0F;&#x89E3;&#x51B3;  us:&#x7528;&#x6237;&#x7A7A;&#x95F4;&#xFF0C;&#x7528;&#x6237;&#x53EF;&#x4EE5;&#x67E5;&#x627E;&#x7684;&#x4F4D;&#x7F6E; sy:&#x5185;&#x6838;&#x7A7A;&#x95F4;

procs:
r(running) //表示等待运行的队列长度,也即等待运行的进程的个数
b(block) //表示阻塞队列长度,也即处于不可中断睡眠态的进程个数
memory:
swpd //交换内存的使用总量
free //空闲物理内存总量
buffer //用于buffer的内存总量
cache //用于cache的内存总量
swap:
si(swap in) //表示从物理内存有多少页面换进swap,也即数据进入swap的数据速率(kb/s)
so(swap out) //表示从swap有多少页面换进物理内存,也即数据离开swap的数据速率(kb/s)
io:
bi(block in) //表示磁盘块有多少个被调入内存中,也即从块设备读入数据到系统的速率(kb/s)
bo(block out) //表示有多少个磁盘块从内存中被同步到硬盘上去了,也即保存数据至块设备的速率(kb/s)
system:
in( interrupts) //表示中断的个数,也即中断速率(kb/s)
cs(context switch) //表示上下文切换的次数,也即进程切换速率(kb/s)
CPU:
us //表示用户空间
sy //表示内核空间
id //表示空闲百分比
wa //表示等待IO完成所占据的时间百分比
st //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)

5. 控制作业

5.1 作业与会话

作业控制是shell的一种功能,它允许单个shell实例运行和管理多个命令。

作业与在shell提示符中输入的每个管道相关联。该管道中的所有进程均是作业的一部分,并且是同一个进程组的成员。(如果在shell提示符中仅输入了一条命令,则这条命令可视为命令的最小管道。该命令将是该作业的唯一成员)

一次只有一个作业可以从特定的终端窗口读取输入和键盘生成的信号。属于该作业的进程是控制终端的前台进程。

[En]

Only one job can read input and keyboard-generated signals from a specific terminal window at a time. The process belonging to the job is the foreground process of the control terminal.

控制终端的后台进程是与该终端相关联的任何其他作业的成员。终端的后台进程不能从终端读取输入,也不能接收键盘生成的中断,但可以写入终端。后台作业可以停止(暂停)或运行。如果正在运行的后台作业尝试从终端读取,则该作业将自动暂停。

[En]

The background process of the control terminal is a member of any other job associated with the terminal. The background process of the terminal cannot read input from the terminal or receive keyboard-generated interrupts, but it can be written to the terminal. The job in the background may be stopped (paused) or running. If a running background job attempts to read from the terminal, the job is automatically paused.

每个终端是其自己的会话,并且可以具有前台进程和多个独立的后台进程。一个作业只能属于一个会话,即属于其控制终端的会话。

[En]

Each terminal is its own session and can have a foreground process and a plurality of independent background processes. A job can belong to only one session, that is, a session that belongs to its control terminal.

[root@lnh ~]# sleep 5000
^Z
[1]+  Stopped                 sleep 5000
[root@lnh ~]# jobs
[1]+  Stopped                 sleep 5000
//&#x4E00;&#x4E2A;&#x4F5C;&#x4E1A;&#x53EA;&#x80FD;&#x5C5E;&#x4E8E;&#x4E00;&#x4E2A;&#x4F1A;&#x8BDD;,&#x8FD9;&#x4E2A;&#x91CC;&#x9762;&#x662F;ctrl+z&#x5C06;&#x4F5C;&#x4E1A;&#x653E;&#x8FDB;&#x540E;&#x53F0;&#x4E86;&#xFF0C;&#x7136;&#x540E;jobs&#x67E5;&#x770B;&#x51FA;&#x6765;

5.2 作业分类

Linux作业分为前台作业与后台作业两种。其各自的特点如下:

前台作业:通过终端启动,启动后占用命令提示符

[En]

Foreground job: started through the terminal and occupied the command prompt after startup

后台作业:可以通过终端启动,但启动后释放命令提示符,后续操作在后台完成

[En]

Background job: can be started through the terminal, but after startup, release the command prompt, and the subsequent operation is completed in the background

此类作业虽然被送往后台运行,但其依然与终端相关。如果希望送往后台后,剥离与终端的关系需要执行(nohup COMMAND &)

[root@lnh ~]# fg
sleep 5000  //&#x524D;&#x53F0;&#x547D;&#x4EE4;
^C   &#x7EC8;&#x6B62;&#x4E86;
[root@lnh ~]# ps -efl|grep sleep
0 S root       10305    9955  0  80   0 - 55475 -      03:33 pts/0    00:00:00 grep --color=auto sleep
//&#x4E0D;&#x4F1A;&#x663E;&#x793A;&#x8FDB;&#x7A0B;
[root@lnh ~]# sleep 5000 &
[1] 10309 //&#x5728;&#x540E;&#x53F0;&#x8FD0;&#x884C;
[root@lnh ~]# jobs
[1]+  Running                 sleep 5000 & //&#x53EF;&#x4EE5;&#x770B;&#x89C1;&#x4F5C;&#x4E1A;
[root@lnh ~]# ps -efl |grep sleep
0 S root       10309    9955  0  80   0 - 54261 hrtime 03:36 pts/0    00:00:00 sleep 5000
0 S root       10315    9955  0  80   0 - 55475 -      03:37 pts/0    00:00:00 grep --color=auto sleep
//&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5230;&#x8FDB;&#x7A0B;
[root@lnh ~]# ps -efl |grep sleep
0 S root       10309    9955  0  80   0 - 54261 hrtime 03:36 pts/0    00:00:00 sleep 5000
0 S root       10317   10097  0  80   0 - 55475 -      03:37 pts/2    00:00:00 grep --color=auto sleep
//&#x5728;&#x53E6;&#x5916;&#x4E00;&#x4E2A;&#x7EC8;&#x7AEF;&#x4E5F;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5230;&#x8FDB;&#x884C;&#xFF0C;&#x5982;&#x679C;&#x628A;&#x539F;&#x6765;&#x6709;&#x540E;&#x53F0;&#x4F5C;&#x4E1A;&#x7684;&#x90A3;&#x4E2A;&#x7EC8;&#x7AEF;&#x5173;&#x95ED;&#x4E86;&#x5728;&#x8FD9;&#x91CC;&#x662F;&#x67E5;&#x770B;&#x4E0D;&#x5230;&#x8FDB;&#x7A0B;&#x7684;
[root@lnh ~]# fg
sleep 5000   //&#x53EF;&#x4EE5;&#x5C06;&#x540E;&#x53F0;&#x7684;&#x4F5C;&#x4E1A;&#x8C03;&#x5165;&#x524D;&#x53F0;
^C   //&#x7EC8;&#x6B62;
//&#x5F53;&#x53EA;&#x6709;&#x4E00;&#x4E2A;&#x540E;&#x53F0;&#x4F5C;&#x4E1A;&#x65F6;&#xFF0C;&#x76F4;&#x63A5;&#x4F7F;&#x7528;fg&#x547D;&#x4EE4;&#xFF0C;&#x4E0D;&#x8DDF;&#x4EFB;&#x4F55;&#x53C2;&#x6570;&#x5373;&#x53EF;&#x5C06;&#x540E;&#x53F0;&#x4F5C;&#x4E1A;&#x8C03;&#x81F3;&#x524D;&#x53F0;&#x8FD0;&#x884C;
[root@lnh ~]# sleep 33333 &
[1] 10319
[root@lnh ~]# sleep 44444444 &
[2] 10320
[root@lnh ~]# jobs
[1]-  Running                 sleep 33333 &
[2]+  Running                 sleep 44444444 &
[root@lnh ~]# fg %1
sleep 33333
^C
[root@lnh ~]# fg %2
sleep 44444444
^C
//&#x5F53;&#x6709;&#x591A;&#x4E2A;&#x4F5C;&#x4E1A;&#x65F6;&#x5219;&#x5FC5;&#x987B;&#x8DDF;&#x4E0A;%+&#x4F5C;&#x4E1A;&#x53F7;&#xFF0C;&#x4E5F;&#x5C31;&#x662F;&#x4E0A;&#x9762;&#x547D;&#x4EE4;&#x6267;&#x884C;&#x7ED3;&#x679C;&#x4E2D;&#x4EE5;[]&#x62EC;&#x8D77;&#x6765;&#x7684;&#x6570;&#x5B57;
[root@lnh ~]# fg %1
sleep 44444444
^Z
[1]+  Stopped                 sleep 44444444
[root@lnh ~]# fg %2
sleep 33333
^Z
[2]+  Stopped                 sleep 33333
[root@lnh ~]# jobs
[1]-  Stopped                 sleep 44444444
[2]+  Stopped                 sleep 33333
//&#x4F7F;&#x7528;ctrl+z&#x53EF;&#x5C06;&#x524D;&#x53F0;&#x8FDB;&#x7A0B;&#x53D1;&#x9001;&#x5230;&#x540E;&#x53F0;&#xFF0C;&#x6B64;&#x65F6;&#x4F5C;&#x4E1A;&#x5C06;&#x5904;&#x4E8E;&#x505C;&#x6B62;&#x72B6;&#x6001;
[root@lnh ~]# bg %1
[1]- sleep 44444444 &
[root@lnh ~]# bg %2
[2]+ sleep 33333 &
[root@lnh ~]# jobs
[1]-  Running                 sleep 44444444 &
[2]+  Running                 sleep 33333 &
//&#x4F7F;&#x7528;bg&#x547D;&#x4EE4;+&#x4F5C;&#x4E1A;&#x53F7;&#x53EF;&#x4F7F;&#x540E;&#x53F0;&#x5DF2;&#x505C;&#x6B62;&#x7684;&#x4F5C;&#x4E1A;&#x91CD;&#x65B0;&#x8FD0;&#x884C;
[root@lnh ~]# jobs
[2]-  Running                 sleep 2222 &
[3]+  Running                 sleep 1111 &
[root@lnh ~]# kill %2
[root@lnh ~]# jobs
[2]-  Terminated              sleep 2222
[3]+  Running                 sleep 1111 &
[root@lnh ~]# kill %3
[root@lnh ~]# jobs
[3]+  Terminated              sleep 1111
[root@lnh ~]# jobs
[root@lnh ~]#
//kill&#x52A0;&#x4E0A;&#x4F5C;&#x4E1A;&#x53F7;&#x53EF;&#x4EE5;&#x624B;&#x52A8;&#x6740;&#x6B7B;&#x6307;&#x5B9A;&#x4F5C;&#x4E1A;
//jobs&#x547D;&#x4EE4;&#x7684;&#x7ED3;&#x679C;&#x4E2D;
// +  &#x547D;&#x4EE4;&#x5C06;&#x9ED8;&#x8BA4;&#x64CD;&#x4F5C;&#x7684;&#x4F5C;&#x4E1A;
// -  &#x547D;&#x4EE4;&#x5C06;&#x7B2C;&#x4E8C;&#x4E2A;&#x9ED8;&#x8BA4;&#x64CD;&#x4F5C;&#x7684;&#x4F5C;&#x4E1A;
[root@lnh ~]# jobs
[1]-  Running                 sleep 11111 &
[2]+  Running                 sleep 22222 &
[root@lnh ~]# pkill -9 sleep
[1]-  Killed                  sleep 11111
[2]+  Killed                  sleep 22222
[root@lnh ~]# jobs
[root@lnh ~]# jobs
[root@lnh ~]#
// pkill [&#x9009;&#x9879;]  name  &#x5220;&#x9664;&#x5168;&#x90E8;&#x8FDB;&#x7A0B;
[root@lnh ~]# killall sleep
[1]-  Terminated              sleep 33333
[2]+  Terminated              sleep 4444444
[root@lnh ~]# jobs
[root@lnh ~]#
//&#x76F4;&#x63A5;&#x5168;&#x90E8;&#x5220;&#x9664;&#x8FDB;&#x7A0B;

6.进程间通信

进程间通信(IPC:Inter Process Communication)

进程间通信方式:

同一主机
共享内存
信号:Signal
不同主机
rpc:remote procecure call
基于socket实现进程间通信

7.使用信号控制进程

信号是传递至进程的软件中断。信号向执行中的程序报告事件。生成信号的事件可以是错误或外部事件(如I/O请求或计时器过期),或者来自于明确请求(如使用信号发送命令)

下表列出了系统管理员用于日常进程管理的基本信号。请通过短名称(HUP)或正确名称(SIGHUP)指代信号。

指定一个信号的方法:
信号号码(数字标识):kill -1
信号完整名称:kill -SIGKILL
信号简写名称:kill -TERM或kill -KILL或kill -INT或kill -HUP
基本进程管理信号:

信号编号ID 短名称 定义 用途 1 HUP 挂起 让一个进程不用重启就可以重读配置文件,并让新的配置信息生效 2 INT 键盘中断 中断一个前台进程。ctrl+c就是用的SIGINT信号 9 KILL 中断,无法拦截 导致立即终止程序。无法被拦截、忽略或处理 15默认值 TERM 终止 导致程序终止。和SIGKILL不同,可以被拦截、忽略或处理。要求程序终止的友好方式,允许自我清理

用户可以中断自己的进程,但只有root才能终止由其他人拥有的进程。

kill命令根据ID向进程发送信号。虽其名称为kill,但该命令可用于发送任何信号,而不仅仅是终止程序的信号

[root@lnh ~]# 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
//&#x663E;&#x793A;&#x6240;&#x6709;&#x53EF;&#x7528;&#x7684;&#x4FE1;&#x53F7;
[root@lnh ~]# sleep 22222
^Z
[1]+  Stopped                 sleep 22222
[root@lnh ~]# sleep 333333
^Z
[2]+  Stopped                 sleep 333333
[root@lnh ~]# sleep 4444444
^Z
[3]+  Stopped                 sleep 4444444
[root@lnh ~]# jobs
[1]   Stopped                 sleep 22222
[2]-  Stopped                 sleep 333333
[3]+  Stopped                 sleep 4444444
[root@lnh ~]# bg %1
[1] sleep 22222 &
[root@lnh ~]# bg %2
[2]- sleep 333333 &
[root@lnh ~]# bg %3
[3]+ sleep 4444444 &
[root@lnh ~]# jobs
[1]   Running                 sleep 22222 &
[2]-  Running                 sleep 333333 &
[3]+  Running                 sleep 4444444 &
[root@lnh ~]# ps -efl |grep sleep
0 S root       10438    9955  0  80   0 - 54261 -      04:44 pts/0    00:00:00 sleep 22222
0 S root       10439    9955  0  80   0 - 54261 -      04:44 pts/0    00:00:00 sleep 333333
0 S root       10440    9955  0  80   0 - 54261 -      04:44 pts/0    00:00:00 sleep 4444444
0 S root       10442    9955  0  80   0 - 55475 -      04:44 pts/0    00:00:00 grep --color=auto sleep
[root@lnh ~]# killall sleep
[1]   Terminated              sleep 22222
[2]-  Terminated              sleep 333333
[3]+  Terminated              sleep 4444444
[root@lnh ~]# jobs
[root@lnh ~]# ps -efl |grep sleep
0 S root       10459    9955  0  80   0 - 55475 -      04:45 pts/0    00:00:00 grep --color=auto sleep
//&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5230;&#xFF0C;&#x8FD0;&#x884C;&#x7684;&#x8FDB;&#x7A0B;&#x90FD;&#x88AB;&#x5220;&#x9664;&#x4E86;

监控进程活动

8.1 IO负载

负载平均值代表一段时间内感知的系统负载。Linux通过预期服务等待时间的表示来实施平均负载计算。

Linux不仅计算进程数,也作为独立的任务计算线程数。运行中线程和等待I/O资源的线程的CPU请求队列对应于R和D进程状态。等待I/O包括处于睡眠而等待预期磁盘和网络响应的任务。

负载数属于全局计数器计算,是所有CPU的总和数。由于从睡眠返回的任务可能会重新调度到不同的CPU,难以精确的每CPU计数,但累计数的准确度可以保障。显示的平均负载代表所有的CPU。

[root@lnh ~]# grep 'model name' /proc/cpuinfo
model name  : Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
model name  : Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
model name  : Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
model name  : Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz
//&#x67E5;&#x770B;cpu&#x6838;&#x5FC3;&#x6570;,&#x53EF;&#x4EE5;&#x770B;&#x89C1;&#x662F;&#x56DB;&#x6838;

一些UNIX系统仅考虑CPU使用率或运行队列长度来指示系统负载。由于具有空闲CPU的系统可能会因为磁盘或网络资源忙而遇到很长时间的等待,因此Linux负载平均值中包含了对I/O的考量。遇到负载平均值很高但CPU活动很低时,请检查磁盘和网络活动。

Linux中可以使用top、uptime显示负载平均值的情况。

[root@lnh ~]# uptime
 04:48:47 up 2 days,  3:02,  3 users,  load average: 0.00, 0.00, 0.00
&#x6B64;&#x5904;&#x7684;load average&#x5C31;&#x8868;&#x793A;&#x8D1F;&#x8F7D;&#x5E73;&#x5747;&#x503C;&#xFF0C;&#x53EF;&#x4EE5;&#x67E5;&#x770B;&#x5230;&#x6B64;&#x65F6;cpu&#x662F;&#x7A7A;&#x95F2;&#x7684;

将显示的负载平均值除以系统中的逻辑CPU数。当值低于1表示资源利用率较好,等待时间很短。当值高于1表示资源饱和,而且有一定的服务等待时间。

空闲CPU队列的负载数为0。每个就绪和等待的线程使计数增加1。总队列数为1时,资源(CPU、磁盘或网络)正在使用中,但没有请求把时间花在等待上。增加的请求数会累积该计数,但由于许多请求可以在时限内处理,资源使用率会很高,而等待时间则不会。

因为磁盘或网络资源忙碌等待I/O而处于睡眠的进程包含在该计数内,而且使负载平均值增大。虽然不能表示CPU使用率,队列数依然表明用户和程序正在等待资源服务。

在资源饱和之前,平均负载将保持在1以下,因为队列中几乎找不到等待的任务。仅当资源饱和导致请求保持排队并由负载计算例程进行计数时,平均负载才会增加。当资源利用率接近100%时,每个额外的请求都会开始遇到服务等待时间。

[En]

Until the resources are saturated, the average load will remain below 1, because waiting tasks will hardly be found in the queue. The load average increases only when the resource saturation causes the request to remain queued and is counted by the load calculation routine. When the resource utilization is close to 100%, each additional request will begin to encounter service waiting time.

8.2 实时进程监控

top用于实现全屏动态显示系统信息
//常用选项:
-d //设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新
-b //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则 可使用-b选项,与-n #合用,可指定显示翻#屏

[root@lnh ~]# top -b -n 1
top - 04:53:59 up 2 days,  3:08,  3 users,  load average: 0.00, 0.00, 0.00
Tasks: 163 total,   1 running, 162 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  1.5 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1788.4 total,    980.3 free,    291.9 used,    516.1 buff/cache
MiB Swap:   2080.0 total,   2080.0 free,      0.0 used.   1329.2 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  244780  13692   8736 S   0.0   0.7   0:05.96 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.29 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq
     10 root      20   0       0      0      0 S   0.0   0.0   0:00.06 ksoftirqd/0
     11 root      20   0       0      0      0 I   0.0   0.0   4:22.56 rcu_sched
     12 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0
     13 root      rt   0       0      0      0 S   0.0   0.0   0:00.50 watchdog/0
     14 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/0
     15 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/1
     16 root      rt   0       0      0      0 S   0.0   0.0   0:00.50 watchdog/1
     17 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/1
     18 root      20   0       0      0      0 S   0.0   0.0   0:00.44 ksoftirqd/1
     20 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/1:0H-kblockd
     21 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/2
     22 root      rt   0       0      0      0 S   0.0   0.0   0:00.30 watchdog/2
     23 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/2
     24 root      20   0       0      0      0 S   0.0   0.0   0:00.09 ksoftirqd/2
     26 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/2:0H
     27 root      20   0       0      0      0 S   0.0   0.0   0:00.00 cpuhp/3
     28 root      rt   0       0      0      0 S   0.0   0.0   0:00.40 watchdog/3
     29 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/3
     30 root      20   0       0      0      0 S   0.0   0.0   0:00.26 ksoftirqd/3
     32 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/3:0H
     34 root      20   0       0      0      0 S   0.0   0.0   0:00.01 kdevtmpfs
     35 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns
     36 root      20   0       0      0      0 S   0.0   0.0   0:00.02 kauditd
     40 root      20   0       0      0      0 S   0.0   0.0   0:00.08 khungtaskd
     41 root      20   0       0      0      0 S   0.0   0.0   0:00.00 oom_reaper
     42 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 writeback
     43 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kcompactd0
     44 root      25   5       0      0      0 S   0.0   0.0   0:00.00 ksmd
     45 root      39  19       0      0      0 S   0.0   0.0   0:01.15 khugepaged
     46 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 crypto
     47 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kintegrityd
     48 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kblockd
     49 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 blkcg_punt_bio
     50 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 tpm_dev_wq
     51 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 md
     52 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 edac-poller
     53 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 watchdogd
     54 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 pm_wq
     83 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kswapd0
    177 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kthrotld
    178 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/24-pciehp
    179 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/25-pciehp
    180 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/26-pciehp
    181 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/27-pciehp
    182 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/28-pciehp
    183 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/29-pciehp
    184 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/30-pciehp
    185 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/31-pciehp
    186 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/32-pciehp
    187 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/33-pciehp
    188 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/34-pciehp
    189 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/35-pciehp
    190 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/36-pciehp
    191 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/37-pciehp
    192 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/38-pciehp
    193 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/39-pciehp
    194 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/40-pciehp
    195 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/41-pciehp
    196 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/42-pciehp
    197 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/43-pciehp
    198 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/44-pciehp
    199 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/45-pciehp
    200 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/46-pciehp
    201 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/47-pciehp
    202 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/48-pciehp
    203 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/49-pciehp
    204 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/50-pciehp
    205 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/51-pciehp
    206 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/52-pciehp
    207 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/53-pciehp
    208 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/54-pciehp
    209 root     -51   0       0      0      0 S   0.0   0.0   0:00.00 irq/55-pciehp
    210 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 acpi_thermal_pm
    211 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kmpath_rdacd
    212 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kaluad
    213 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 ipv6_addrconf
    214 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kstrp
    505 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 ata_sff
    506 root      20   0       0      0      0 S   0.0   0.0   0:00.01 scsi_eh_0
    507 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 scsi_tmf_0
    508 root      20   0       0      0      0 S   0.0   0.0   0:00.01 scsi_eh_1
    509 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mpt_poll_0
    510 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 scsi_tmf_1
    512 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mpt/0
    521 root      20   0       0      0      0 S   0.0   0.0   0:00.00 scsi_eh_2
    522 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 scsi_tmf_2
    525 root       0 -20       0      0      0 I   0.0   0.0   0:00.36 kworker/0:1H-kblockd
    527 root       0 -20       0      0      0 I   0.0   0.0   0:00.89 kworker/3:1H-kblockd
    531 root       0 -20       0      0      0 I   0.0   0.0   0:00.25 kworker/1:1H-kblockd
    592 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kdmflush
    600 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kdmflush
    628 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfsalloc
    630 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs_mru_cache
    633 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-buf/dm-0
    634 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-conv/dm-0
    636 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-cil/dm-0
    637 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-reclaim/dm-
    638 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-eofblocks/d
    639 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-log/dm-0
    640 root      20   0       0      0      0 S   0.0   0.0   0:07.40 xfsaild/dm-0
    724 root       0 -20       0      0      0 I   0.0   0.0   0:00.47 kworker/2:1H-xfs-log/dm-0
    728 root      20   0   94076   9840   8760 S   0.0   0.5   0:01.24 systemd-journal
    755 root      20   0  110188  11088   7620 S   0.0   0.6   0:01.01 systemd-udevd
    806 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kdmflush
    812 root     -51   0       0      0      0 S   0.0   0.0   0:01.51 irq/16-vmwgfx
    814 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 ttm_swap
    831 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-buf/sda1
    832 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-conv/sda1
    833 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-cil/sda1
    834 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-reclaim/sda
    835 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-eofblocks/s
    836 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-log/sda1
    837 root      20   0       0      0      0 S   0.0   0.0   0:00.00 xfsaild/sda1
    839 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-buf/dm-2
    840 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-conv/dm-2
    841 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-cil/dm-2
    843 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-reclaim/dm-
    844 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-eofblocks/d
    845 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 xfs-log/dm-2
    846 root      20   0       0      0      0 S   0.0   0.0   0:00.13 xfsaild/dm-2
    868 root      16  -4   84184   4424   3672 S   0.0   0.2   0:00.22 auditd
    890 polkitd   20   0 1764244  27080  17516 S   0.0   1.5   0:00.30 polkitd
    892 root      20   0  124952   5460   4828 S   0.0   0.3   0:09.03 irqbalance
    895 dbus      20   0   84888   6072   5272 S   0.0   0.3   0:00.64 dbus-daemon
    897 root      20   0  430808  14240  12188 S   0.0   0.8   0:00.45 sssd
    899 rngd      20   0  160108   6476   5660 S   0.0   0.4   0:32.28 rngd
    909 root      20   0  437568  15188  12412 S   0.0   0.8   0:06.55 sssd_be
    910 root      20   0  440960  41164  39428 S   0.0   2.2   0:05.34 sssd_nss
    913 root      20   0  508336  40024  18044 S   0.0   2.2   0:00.73 firewalld
    914 root      20   0   98788   9780   7128 S   0.0   0.5   0:00.91 systemd-logind
    922 root      20   0  601264  18388  16088 S   0.0   1.0   0:12.04 NetworkManager
    932 root      20   0   92284   7772   6852 S   0.0   0.4   0:00.05 sshd
    935 root      20   0  626344  30744  15440 S   0.0   1.7   0:23.64 tuned
    941 root      20   0  251512   2352   1820 S   0.0   0.1   0:00.02 rhsmcertd
    947 root      20   0  246684   3704   2840 S   0.0   0.2   0:00.41 crond
    949 root      20   0  123016   5540   4648 S   0.0   0.3   0:00.03 login
   1468 root      20   0   93892   9700   8304 S   0.0   0.5   0:00.09 systemd
   1471 root      20   0  299924   5072     24 S   0.0   0.3   0:00.00 (sd-pam)
   1840 root      20   0  236772   4740   3372 S   0.0   0.3   0:00.05 bash
   9851 root      20   0       0      0      0 I   0.0   0.0   0:00.25 kworker/u256:2-events_unbound
   9949 root      20   0       0      0      0 I   0.0   0.0   0:09.50 kworker/2:1-cgroup_destroy
   9950 root      20   0  153356  10252   9000 S   0.0   0.6   0:00.02 sshd
   9954 root      20   0  153356   5596   4344 S   0.0   0.3   0:00.52 sshd
   9955 root      20   0  237104   5304   3596 S   0.0   0.3   0:00.46 bash
  10085 root      20   0       0      0      0 I   0.0   0.0   0:00.43 kworker/1:0-events
  10092 root      20   0  153356  10316   9064 S   0.0   0.6   0:00.01 sshd
  10096 root      20   0  153356   5500   4248 S   0.0   0.3   0:00.05 sshd
  10097 root      20   0  236872   5024   3472 S   0.0   0.3   0:00.04 bash
  10169 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/1:2-cgroup_destroy
  10187 root      20   0       0      0      0 I   0.0   0.0   0:00.22 kworker/u256:1-events_unbound
  10296 root      20   0       0      0      0 I   0.0   0.0   0:04.04 kworker/2:3-events
  10385 root      20   0       0      0      0 I   0.0   0.0   0:00.75 kworker/0:0-events
  10410 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/3:0-mm_percpu_wq
  10460 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/3:1-xfs-sync/dm-0
  10461 root      20   0       0      0      0 I   0.0   0.0   0:00.01 kworker/0:2-ata_sff
  10464 root      20   0       0      0      0 I   0.0   0.0   0:00.00 kworker/0:1-ata_sff
  10465 root      20   0  275164   4480   3904 R   0.0   0.2   0:00.00 top
//&#x8FD9;&#x4E2A;&#x547D;&#x4EE4;&#x5B58;&#x5728;&#x5B89;&#x5168;&#x9690;&#x60A3;
//&#x76F4;&#x63A5;top&#x67E5;&#x770B;&#x4F1A;&#x4E00;&#x76F4;&#x5728;&#x8FD0;&#x884C;&#xFF0C;&#x6240;&#x4EE5;&#x6253;&#x5370;&#x51FA;&#x4E00;&#x9875;&#x53EF;&#x4EE5;&#x65B9;&#x4FBF;&#x67E5;&#x770B;
load average&#xFF1A;0&#x5206;&#x949F;&#xFF0C;0&#x5206;&#x949F;&#xFF0C;0&#x5206;&#x949F;
    load average    //CPU&#x961F;&#x5217;&#x4E2D;&#x7B49;&#x5F85;&#x8FD0;&#x884C;&#x7684;&#x4EFB;&#x52A1;&#x7684;&#x4E2A;&#x6570;
cpu(s)&#xFF1A;&#x591A;&#x9897;CPU&#x5E73;&#x5747;&#x8D1F;&#x8F7D;&#xFF0C;&#x6309;1&#x952E;&#x663E;&#x793A;&#x6BCF;&#x9897;CPU&#x5E73;&#x5747;&#x8D1F;&#x8F7D;&#x3002;
    us  //&#x8868;&#x793A;&#x7528;&#x6237;&#x7A7A;&#x95F4;&#xFF1B;
    sy  //&#x8868;&#x793A;&#x5185;&#x6838;&#x7A7A;&#x95F4;&#xFF1B;
    ni  //&#x8868;&#x793A;&#x8C03;&#x6574;nice&#x503C;&#xFF0C;CPU&#x5360;&#x7528;&#x7684;&#x6BD4;&#x7387;&#xFF1B;
    id  //&#x8868;&#x793A;&#x7A7A;&#x95F2;&#x767E;&#x5206;&#x6BD4;&#xFF1B;
    wa  //&#x8868;&#x793A;&#x7B49;&#x5F85;IO&#x5B8C;&#x6210;&#x6240;&#x5360;&#x636E;&#x7684;&#x65F6;&#x95F4;&#x767E;&#x5206;&#x6BD4;&#xFF1B;
    hi  //&#x8868;&#x793A;hard interrupt&#xFF0C;&#x786C;&#x4EF6;&#x4E2D;&#x65AD;&#x5360;&#x636E;&#x7684;&#x65F6;&#x95F4;&#x767E;&#x5206;&#x6BD4;&#xFF1B;
    si  //&#x8868;&#x793A;&#x8F6F;&#x4E2D;&#x65AD;&#x5360;&#x636E;&#x7684;&#x65F6;&#x95F4;&#x767E;&#x5206;&#x6BD4;&#xFF1B;
    st  //&#x8868;&#x793A;steal&#xFF0C;&#x88AB;&#x865A;&#x62DF;&#x5316;&#x6280;&#x672F;&#x5077;&#x8D70;&#x7684;&#x65F6;&#x95F4;&#xFF08;&#x6BD4;&#x5982;&#x8FD0;&#x884C;&#x865A;&#x62DF;&#x673A;&#xFF09;
PR      //&#x4F18;&#x5148;&#x7EA7;
NI      //nice&#x503C;
VIRT    //&#x865A;&#x62DF;&#x5185;&#x5B58;&#x96C6;
RES     //&#x5E38;&#x9A7B;&#x5185;&#x5B58;&#x96C6;
SHR     //&#x5171;&#x4EAB;&#x5185;&#x5B58;&#x5927;&#x5C0F;
S       //&#x8FDB;&#x7A0B;&#x72B6;&#x6001;

//top&#x547D;&#x4EE4;&#x4EA4;&#x4E92;&#x5F0F;&#x5B50;&#x547D;&#x4EE4;&#xFF1A;
    M   //&#x6839;&#x636E;&#x9A7B;&#x7559;&#x5185;&#x5B58;&#x5927;&#x5C0F;&#x8FDB;&#x884C;&#x6392;&#x5E8F;&#xFF0C;&#x9ED8;&#x8BA4;&#x6839;&#x636E;CPU&#x767E;&#x5206;&#x6BD4;&#x6392;&#x5E8F;
    P   //&#x6839;&#x636E;CPU&#x4F7F;&#x7528;&#x767E;&#x5206;&#x6BD4;&#x8FDB;&#x884C;&#x6392;&#x5E8F;
    T   //&#x6839;&#x636E;&#x7D2F;&#x8BA1;&#x65F6;&#x95F4;&#xFF08;&#x5360;&#x636E;CPU&#x65F6;&#x957F;&#xFF09;&#x8FDB;&#x884C;&#x6392;&#x5E8F;
    l   //&#x662F;&#x5426;&#x663E;&#x793A;&#x5E73;&#x5747;&#x8D1F;&#x8F7D;&#x548C;&#x542F;&#x52A8;&#x65F6;&#x95F4;
    t   //&#x662F;&#x5426;&#x663E;&#x793A;&#x8FDB;&#x7A0B;&#x548C;CPU&#x72B6;&#x6001;&#x76F8;&#x5173;&#x4FE1;&#x606F;
    m   //&#x662F;&#x5426;&#x663E;&#x793A;&#x5185;&#x5B58;&#x76F8;&#x5173;&#x4FE1;&#x606F;
    c   //&#x662F;&#x5426;&#x663E;&#x793A;&#x5B8C;&#x6574;&#x7684;&#x547D;&#x4EE4;&#x884C;&#x4FE1;&#x606F;
    q   //&#x9000;&#x51FA;top&#x547D;&#x4EE4;
    k   //&#x7EC8;&#x6B62;&#x67D0;&#x4E2A;&#x8FDB;&#x7A0B;
    1   //&#x663E;&#x793A;&#x6240;&#x6709;CPU&#x7684;&#x4FE1;&#x606F;
    s   //&#x4FEE;&#x6539;&#x5237;&#x65B0;&#x65F6;&#x95F4;&#x95F4;&#x9694;

使用htop命令这个命令比top安全性高

Linux进程管理
//Mem内存(一共1.75G,已经用了302M)
//Swp所属空间(有2.03G,使用0k)
//Tasks任务一共有29个 现存有17个,一个正在运行
//load average负载均衡0000000
//uptime已经运行了2天3个多小时
//PIDPID是程序被操作系统加载到内存成为进程后动态分配的资源,每次程序执行时,操作系统都会重新加载,PID在每次加载的时候都是不同的
//USER用户
//PRI优先级
//NI nice值
//VIRT虚拟内存集
//RES常驻内存集
//S状态
//CPU%cpu使用率
//MEM%硬盘使用率
//TIME+运行的时长
//Command 执行的命令
F1:帮助
F2:设置
F3:搜索
F4:过滤
F5:生成树
F6:排序
F7:nice值减
F8:nice加
F9:杀死
F10:退出

作业

写下与以下描述对应的进程状态标志:

[En]

Write the process status flag corresponding to the following description:

描述 状态标志 进程已被停止(暂停) T 进程已释放了其所有资源(pid除外) X 进程正在CPU上运行或者正在等待于CPU上运行 R 进程正处于睡眠状态,直至满足某些条件后才会启动 S 进程正在等待I/O或某些条件得到满足,并且绝对不会影响信号 D

  1. 并排打开两个终端窗口,分别称为左窗口和右窗口
    Linux进程管理
  2. 在左窗口中,启动一个进程,该进程以一秒为间隔持续向~/outfile文件附加单词”rock”和一个空格。整个命令集必须包含在括号内,以便作业控制可以将该集合解译为一个作业
    Linux进程管理
  3. 在右窗口中,使用tail确认新进程正在写入该文件
[root@lnh ~]# tail -f ~/outfile
rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock ^Z
[2]+  Stopped                 tail -f ~/outfile

Linux进程管理
4. 4.在左窗口中,使用ctrl+z快捷键暂停正在运行的进程。shell将返回作业ID并用方括号括起。在右窗口中确认进程输出已经停止
Linux进程管理
Linux进程管理
5. 在左窗口中,查看jobs列表。+表示当前的作业。使用bg命令在后台重新启动该作业,并再次查看jobs列表,在右窗口中,确认进程输出再次处于活动状态
Linux进程管理
Linux进程管理
6. 在左窗口中,再启动两个进程,以便向同一输出文件附加内容。将”rock”替换为”paper”,再替换为”scissors”。要将进程正确置于后台,整个命令集必须包含在括号内,并且以&符号结尾
[root@lnh ~]# (while true;do echo -n 'paper ' >> ~/outfile;sleep 1;done) &
[2] 11945
[root@lnh ~]# (while true;do echo -n 'scissors ' >> ~/outfile;sleep 1;done) &[3] 11975
  1. 在左窗口中,检查jobs,以查看所有三个进程都在运行中。在右窗口中,确认所有三个进程都附加内容到文件中
[root@lnh ~]# jobs
[1]   Running                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done ) &
[2]-  Running                 ( while true; do
    echo -n 'paper ' >> ~/outfile; sleep 1;
done ) &
[3]+  Running                 ( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done ) &

Linux进程管理
8. 仅使用之前学习的命令,暂停”rock”进程。在左窗口中,使用从jobs列表中确定的作业ID使作业进入前台,然后使用ctrl+z暂停该作业,确认”rock”进程为已停止。在右窗口中,确认”rock”输出不再活动
[root@lnh ~]# jobs
[1]   Running                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done ) &
[2]-  Running                 ( while true; do
    echo -n 'paper ' >> ~/outfile; sleep 1;
done ) &
[3]+  Running                 ( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done ) &
[root@lnh ~]# fg %1
( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
^Z
[1]+  Stopped                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[root@lnh ~]# jobs
[1]+  Stopped                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[2]   Running                 ( while true; do
    echo -n 'paper ' >> ~/outfile; sleep 1;
done ) &
[3]-  Running                 ( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done ) &

Linux进程管理
9. 终止”paper”进程。在左窗口中,使作业进入前台,然后使用ctrl+c终止该作业,确认”paper”进程已经消失。在右窗口中,确认”paper”输出不再活动
[root@lnh ~]# fg %2
( while true; do
    echo -n 'paper ' >> ~/outfile; sleep 1;
done )
^C
[root@lnh ~]# jobs
[1]+  Stopped                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[3]-  Running                 ( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done ) &

Linux进程管理
10. 在左窗口中,使用ps查看剩余的作业。暂停中的作业具有状态T标志。其他后台作业为睡眠中(S),因为ps在显示时处于”CPU上”(R)
[root@lnh ~]# ps j
   PPID     PID    PGID     SID TTY        TPGID STAT   UID   TIME COMMAND
    949    1840    1840    1840 tty1        1840 Ss+      0   0:00 -bash
  10839   10840   10840   10840 pts/1      13291 Ss       0   0:00 -bash
  11103   11104   11104   11104 pts/3      11713 Ss       0   0:00 -bash
  11104   11184   11184   11104 pts/3      11713 T        0   0:00 sleep 2222
  10840   11203   11203   10840 pts/1      13291 T        0   0:00 -bash
  11104   11470   11470   11104 pts/3      11713 T        0   0:00 tail -f /r
  11104   11713   11713   11104 pts/3      11713 S+       0   0:00 tail -f /r
  10840   11975   11975   10840 pts/1      13291 S        0   0:00 -bash
  11203   12781   11203   10840 pts/1      13291 T        0   0:00 sleep 1
  11975   13290   11975   10840 pts/1      13291 S        0   0:00 sleep 1
  10840   13291   13291   10840 pts/1      13291 R+       0   0:00 ps j
  1. 停止剩余的两个作业。在左窗口中,使其中一个作业进入前台。使用ctrl+c将其终止,对剩余的作业重复此操作。停止的作业在前入前台时会临时重新启动。确认没有剩余的作业,输出也已停止。
[root@lnh ~]# jobs
[1]+  Stopped                 ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[3]-  Running                 ( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done ) &
[root@lnh ~]# fg %1
( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
^C
[root@lnh ~]# fg %3
( while true; do
    echo -n 'scissors ' >> ~/outfile; sleep 1;
done )
^C
[root@lnh ~]# jobs
[root@lnh ~]#
  1. 在右窗口中,停止tail命令。关闭多余的终端窗口
    Linux进程管理
    Linux进程管理

Original: https://www.cnblogs.com/tushanbu/p/16453245.html
Author: 涂山布
Title: Linux进程管理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/523181/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球