Linux进程管理命令

ps

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

  • 用户识别符(UID),它确定进程的特权
  • 唯一进程识别符(PID)
  • CPU和已经花费的实时时间
  • 进程在各种位置上分配的内存数量
  • 进程的位置STDOUT,称为控制终端
  • 当前的进程状态
    ps支持三种选项格式:
  • UNIX(POSIX)选项,可以分组但必须以连字符开头
  • BSD 选项,可以分组但不可与连字符同用
  • GNU 长选项,以双连字符开头
    ps(process state),显示进程信息。注意事项:
  • 加了[]中括号的,表示内核线程,通常位于顶部
  • exiting或defunct表示僵尸进程

a //显示所有与终端有关的进程

[root@localhost ~]# ps a
    PID TTY      STAT   TIME COMMAND
   1741 tty1     Ssl+   0:00 /usr/libexec/gdm-wayland-session --register-session dbus-run-session -- gnome-session --autostart /usr/share/gdm/greeter/autostart
   1757 tty1     S+     0:00 dbus-run-session -- gnome-session --autostart /usr/share/gdm/greeter/autostart
   1758 tty1     Sl+    0:00 dbus-daemon --nofork --print-address 4 --session
   1760 tty1     Sl+    0:00 /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart

u //显示进程是由哪个用户启动的

[root@localhost ~]# ps u
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root        2378  0.0  0.1  27780  5320 pts/0    Ss   02:53   0:00 -bash
root        2417  0.0  0.1  30188  5564 pts/1    Ss   02:53   0:00 -bash
root        2695  0.2  0.1  63652  5484 pts/1    S+   02:53   0:00 top
root        7468  0.0  0.1  58956  3880 pts/0    R+   02:55   0:00 ps u

x //显示所有与终端无关的进程

[root@localhost ~]# ps x
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
      2 ?        S      0:00 [kthreadd]
      3 ?        I<     0:00 [rcu_gp]
      4 ?        I<     0:00 [rcu_par_gp]
      5 ?        I      0:00 [kworker/0:0-mm_percpu_wq]
      6 ?        I<     0:00 [kworker/0:0H-events_highpri]

-e //显示所有进程,与-A效果相同

[root@localhost ~]# ps -e
    PID TTY          TIME CMD
      1 ?        00:00:02 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      5 ?        00:00:00 kworker/0:0-mpt_poll_0

-l //以长格式显示

[root@localhost ~]# ps -l
F S   UID     PID    PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0    2378    2376  0  80   0 -  6945 -      pts/0    00:00:00 bash
0 R     0   14415    2378  0  80   0 - 11425 -      pts/0    00:00:00 ps

-f //显示更详细的完整格式的进程信息

[root@localhost ~]# ps -f
UID          PID    PPID  C STIME TTY          TIME CMD
root        2378    2376  0 02:53 pts/0    00:00:00 -bash
root       15656    2378  0 02:58 pts/0    00:00:00 ps -f

-o //根据自己的需要选择要显示的字段

[root@localhost ~]# ps -o  uid,pid
  UID     PID
    0    2378
    0   25085

aux结果解析:
VSZ //Virtual memory SiZe,虚拟内存集
RSS //ReSident Size,常驻内存集
STAT //进程状态
TIME //运行时的累积时长

ps命令结果解析:
NI //nice值
PRI //优先级
PSR //进程运行在哪个CPU核心上
RTPTRIO //实时优先级
C //运行的CPU编号
STIME //进程的启动时间
VSZ //Virtual memory SiZe,虚拟内存集
RSS //ReSident Size,常驻内存集
STAT //进程状态
TIME //运行时的累积时长

pstree

stree用于显示当前系统上的进程树

root@localhost ~]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─atd
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon
        ├─firewalld───{firewalld}
        ├─irqbalance
        ├─login───bash
        ├─lvmetad
        ├─master───qmgr
        ├─polkitd───5*[{polkitd}]
        ├─rhnsd
        ├─rhsmcertd
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        └─vmtoolsd───{vmtoolsd}

pgrep

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

[root@localhost ~]# pgrep haha
1387
[root@localhost ~]# pgrep sshd
1105
8826
[root@localhost ~]# ps -ef|grep sshd
root       1105      1  0 08:44 ?        00:00:00 /usr/sbin/sshd 
root       8826   1105  0 09:48 ?        00:00:00 sshd: root@pts/0
root       9908   8828  0 16:42 pts/0    00:00:00 grep --color=auto sshd

pidof

根据进程名查找其PID号

[root@localhost ~]# pidof sshd
8826 1175
[root@localhost ~]# pidof haha
1397

vmstat

虚拟内存状态查看命令

//语法:vmstat [options] [delay [count]]
//例:
vmstat 2 //表示每2秒刷新一次
vmstat 2 5 //表示每2秒刷新一次,刷新5次后退出

//常用的选项:
-s //显示内存的统计数据

[root@localhost ~]# vmstat -s
      3793900 K total memory
       715452 K used memory
       235936 K active memory
       817708 K inactive memory
      2360236 K free memory
         3352 K buffer memory
       714860 K swap cache
      4124668 K total swap
            0 K used swap
      4124668 K free swap
          924 non-nice user cpu ticks
            0 nice user cpu ticks
         4962 system cpu ticks
       450857 idle cpu ticks
          216 IO-wait cpu ticks
          407 IRQ cpu ticks
          242 softirq cpu ticks
  
[root@localhost ~]# 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 576992   3388 271316    0    0     2     1   15   13  0  0 100  0  0
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,被虚拟化技术偷走的时间(比如运行虚拟机)

控制作业

作业与会话

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

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

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

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

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

作业分类

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

前台作业:通过终端启动,且启动后一直占据了命令提示符
后台作业:可以通过终端启动,但启动之后,释放命令提示符,后续的操作在后台完成
此类作业虽然被送往后台运行,但其依然与终端相关。如果希望送往后台后,剥离与终端的关系需要执行(nohup COMMAND &)

在后台运行作业

//在命令后跟上&符号可以生成一个后台作业

[root@localhost ~]# sleep 1000 &
[1] 1819

//jobs命令用于显示当前所有的后台作业

[root@localhost ~]# jobs
[1]+  Running                 sleep 1000 &

//fg命令用于将后台作业调至前台运行

[root@localhost ~]# fg

//当只有一个后台作业时,直接使用fg命令,不跟任何参数即可将后台作业调至前台运行,但是当有多个作业时则必须跟上%+作业号,也就是上面命令执行结果中以[]括起来的数字。

[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# fg %1

//使用ctrl+z可将前台进程发送到后台,此时作业将处于停止状态

[root@localhost ~]# fg %1
sleep 1000
^Z
[1]+  Stopped                 sleep 1000

//使用bg命令+作业号可使后台已停止的作业重新运行

[root@localhost ~]# bg %1
[1]+ sleep 1000 &
[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &

//kill加上作业号可以手动杀死指定作业

[root@localhost ~]# jobs
[1]-  Running                 sleep 1000 &
[2]+  Running                 sleep 500 &
[root@localhost ~]# kill %1
[1]-  Terminated              sleep 1000
[root@localhost ~]# jobs
[2]+  Running                 sleep 500 &

//jobs命令的结果中
+ //命令将默认操作的作业
- //命令将第二个默认操作的作业

进程间通信

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

进程间通信方式:

  • 同一主机

    • 共享内存
    • 信号:Signal
  • 不同主机

    • rpc:remote procecure call
    • 基于socket实现进程间通信

使用信号控制进程

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

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

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

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

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

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

直接用kill -9 进程号(pid)


监控进程活动

IO负载

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

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

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

//查看cpu核心数

[root@localhost ~]# grep 'model name' /proc/cpuinfo
model name      : Intel(R) Core(TM) i7-10710M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i7-10710M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i7-10710M CPU @ 2.50GHz
model name      : Intel(R) Core(TM) i7-10710M CPU @ 2.50GHz

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

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

[root@localhost ~]# uptime
 22:35:39 up  7:06,  3 users,  load average: 0.00, 0.01, 0.05

//此处的load average就表示负载平均值,这三个值代表最近1、5和15分钟的负载情况。
将显示的负载平均值除以系统中的逻辑CPU数。当值低于1表示资源利用率较好,等待时间很短。当值高于1表示资源饱和,而且有一定的服务等待时间。

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

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

在资源饱和前,平均负载将保持在1以下,因为几乎不会在队列中发现等待的任务。只有资源饱和导致请求留在排队状态并且被负载计算例程计数时,负载平均才会增大。当资源使用率接近100%时,每个增加的请求将开始遭遇服务等待时间。

实时进程监控

top用于实现全屏动态显示系统信息

//常用选项:
-d //设置延迟时长,top -d 1表示每隔1秒刷新一次,默认每隔5秒刷新

[root@localhost ~]# top -d 1
top - 03:04:13 up 10 min,  2 users,  load average: 0.08, 0.14, 0.09
Tasks: 279 total,   1 running, 278 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.8 sy,  0.0 ni, 99.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3705.0 total,   2303.6 free,    699.8 used,    701.5 buff/cache
MiB Swap:   4028.0 total,   4028.0 free,      0.0 used.   2761.9 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                                          
   1266 root      20   0  500264  35932  19200 S   1.0   0.9   0:06.25 tuned                                                                                            
   2376 root      20   0  164164   6764   5104 S   0.7   0.2   0:04.16 sshd                                                                                             
   2695 root      20   0   63652   5484   4000 S   0.3   0.1   0:01.18 top                                                                                              
  30626 root      20   0   65788   5012   4136 R   0.3   0.1   0:00.02 top                                                                                              
      1 root      20   0  241160  13780   8728 S   0.0   0.4   0:02.06 systemd                                                                                          
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.02 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                                                                                       
      5 root      20   0       0      0      0 I   0.0   0.0   0:00.07 kworker/0:0-mpt_poll_0                                                                           
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri                                                                      
      8 root      20   0       0      0      0 I   0.0   0.0   0:00.08 kworker/u256:0-events_unbound                                                                    
      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.00 rcu_tasks_rude_                                                                                  
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace                                                                                  
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.01 ksoftirqd/0                                                                                      
     13 root      20   0       0      0      0 I   0.0   0.0   0:00.17 rcu_sched                                                                                        
     14 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 migration/0                                                                                      
     15 root      rt   0       0      0      0 S   0.0   0.0   0:00.00 watchdog/0                  

-b //批模式翻屏显示,默认只实时显示一屏,若要显示后面的进程信息则可使用-b选项,与-n #合用,可指定显示翻#屏

[root@localhost ~]# top -b -n 1
top - 16:58:44 up  8:14,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999720 total,   575768 free,   148504 used,   275448 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.   670936 avail Mem

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
     1 root      20   0  190888   3776   2504 S   0.0  0.4   0:01.14 systemd
     2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd
     3 root      20   0       0      0      0 S   0.0  0.0   0:00.00 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.04 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.83 rcu_sched  

load average:1分钟,5分钟,15分钟
    load average    //CPU队列中等待运行的任务的个数
cpu(s):多颗CPU平均负载,按1键显示每颗CPU平均负载。
    us  //表示用户空间;
    sy  //表示内核空间;
    ni  //表示调整nice值,CPU占用的比率;
    id  //表示空闲百分比;
    wa  //表示等待IO完成所占据的时间百分比;
    hi  //表示hard interrupt,硬件中断占据的时间百分比;
    si  //表示软中断占据的时间百分比;
    st  //表示steal,被虚拟化技术偷走的时间(比如运行虚拟机)
PR      //优先级
NI      //nice值
VIRT    //虚拟内存集
RES     //常驻内存集
SHR     //共享内存大小
S       //进程状态


//top命令交互式子命令:
    M   //根据驻留内存大小进行排序,默认根据CPU百分比排序
    P   //根据CPU使用百分比进行排序
    T   //根据累计时间(占据CPU时长)进行排序
    l   //是否显示平均负载和启动时间
    t   //是否显示进程和CPU状态相关信息
    m   //是否显示内存相关信息
    c   //是否显示完整的命令行信息
    q   //退出top命令
    k   //终止某个进程
    1   //显示所有CPU的信息
    s   //修改刷新时间间隔

拓展

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

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

按以下顺序练习后台与前台进程操作:

1.并排打开两个终端窗口,分别称为左窗口和右窗口
在左窗口中,启动一个进程,该进程以一秒为间隔持续向~/outfile文件附加单词"rock"和一个空格。整个命令集必须包含在括号内,以便作业控制可以将该集合解译为一个作业

(while true;do echo -n 'rock ' >> ~/outfile;sleep 1;done)

3.在右窗口中,使用tail确认新进程正在写入该文件

[root@localhost ~]# 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 

4.在左窗口中,使用ctrl+z快捷键暂停正在运行的进程。shell将返回作业ID并用方括号括起。在右窗口中确认进程输出已经停止

[root@localhost ~]# (while true;do echo -n 'rock ' >> ~/outfile;sleep 1;done)
^Z
[1]+  已停止               ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )

5.在左窗口中,查看jobs列表。+表示当前的作业。使用bg命令在后台重新启动该作业,并再次查看jobs列表,在右窗口中,确认进程输出再次处于活动状态

[root@localhost ~]# jobs 
[1]+  已停止               ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[root@localhost ~]# bg 
[1]+ ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done ) &
[root@localhost ~]# jobs 
[1]+  运行中               ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done ) &
[root@localhost ~]# 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 

6.在左窗口中,再启动两个进程,以便向同一输出文件附加内容。将"rock"替换为"paper",再替换为"scissors"。要将进程正确置于后台,整个命令集必须包含在括号内,并且以&符号结尾

[root@localhost ~]# (while true;do echo -n 'paper ''scissors' >> ~/outfile;sleep 1;done) &
[2] 116784

7.在左窗口中,检查jobs,以查看所有三个进程都在运行中。在右窗口中,确认所有三个进程都附加内容到文件中

[root@localhost ~]# jobs 
[1]-  运行中               ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done ) &
[2]+  运行中               ( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done ) &
[root@localhost ~]# tail -f ~/outfile
 paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsrock paper scissorsro

8.仅使用之前学习的命令,暂停"rock"进程。在左窗口中,使用从jobs列表中确定的作业ID使作业进入前台,然后使用ctrl+z暂停该作业,确认"rock"进程为已停止。在右窗口中,确认"rock"输出不再活动

[root@localhost ~]#  ps aux | grep sleep
root      171435  0.0  0.0   7524   940 ?        S    03:35   0:00 sleep 60
root      175201  0.0  0.0   7524   820 pts/0    S    03:36   0:00 sleep 1
root      175202  0.0  0.0   7524   928 pts/0    S    03:36   0:00 sleep 1
[root@localhost ~]# kill -1 % 1 
[2]+  挂起                  ( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done )
[root@localhost ~]# kill -1 % 2
[1]+  挂起                  ( while true; do
    echo -n 'rock ' >> ~/outfile; sleep 1;
done )
[root@localhost ~]# fg % 1
( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done )
^Z
[1]+  已停止               ( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done )

9.终止"paper"进程。在左窗口中,使作业进入前台,然后使用ctrl+c终止该作业,确认"paper"进程已经消失。在右窗口中,确认"paper"输出不再活动

[root@localhost ~]# tail -f ~/outfile
sorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissors^C
[root@localhost ~]# 

10.在左窗口中,使用ps查看剩余的作业。暂停中的作业具有状态T标志。其他后台作业为睡眠中(S),因为ps在显示时处于"CPU上"®

[root@localhost ~]# ps aux |grep sleep
root      204799  0.0  0.0   7524   908 pts/0    T    03:41   0:00 sleep 1
root      224745  0.0  0.0   7524   932 ?        S    03:45   0:00 sleep 60
root      229106  0.0  0.0  15480  3412 ?        Ss   03:46   0:00 bash -c export LANG="en_US";export LANGUAGE="en_US";export LC_ALL="en_US";free;echo finalshell_separator;uptime;echo finalshell_separator;cat /proc/net/dev;echo finalshell_separator;df;echo finalshell_separator;sleep 1;free;echo finalshell_separator;uptime;echo finalshell_separator;cat /proc/net/dev;echo finalshell_separator;df;echo finalshell_separator;
root      229107  0.0  0.0  15480  3392 ?        Ss   03:46   0:00 bash -c export LANG="en_US";export LANGUAGE="en_US";export LC_ALL="en_US";free;echo finalshell_separator;uptime;echo finalshell_separator;cat /proc/net/dev;echo finalshell_separator;df;echo finalshell_separator;sleep 1;free;echo finalshell_separator;uptime;echo finalshell_separator;cat /proc/net/dev;echo finalshell_separator;df;echo finalshell_separator;
root      229152  0.0  0.0   4732   940 ?        S    03:46   0:00 sleep 1
root      229153  0.0  0.0   4732   904 ?        S    03:46   0:00 sleep 1
root      229214  0.0  0.0  12352  1080 pts/0    S+   03:46   0:00 grep --color=auto sleep

11.停止剩余的两个作业。在左窗口中,使其中一个作业进入前台。使用ctrl+c将其终止,对剩余的作业重复此操作。停止的作业在前入前台时会临时重新启动。确认没有剩余的作业,输出也已停止。

[root@localhost ~]# fg % 1
( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done )
^C
[root@localhost ~]# fg % 2
( while true; do
    echo -n 'paper ''scissors' >> ~/outfile; sleep 1;
done )
^C
[root@localhost ~]# jobs 
[root@localhost ~]# 

12.在右窗口中,停止tail命令。关闭多余的终端窗口

sorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissorspaper scissors^C
[root@localhost ~]# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值