• linux -- 进程管理和作业控制


    一. 作业控制

    1. 直接将命令放到后台"执行": & 

    [root @test /root ]# command &    
    范例:  
    [root @test /root]# find / -name testing & <==将该执行程序丢到背景执行  
    [root @test /root]# fg                     <==将该程序叫回屏幕前执行  

    说明: 

    如果想要让屏幕中的工作( command )在背景底下执行的时后,就使用 & 吧!不过,由于是背景执行的,所以该程序的输出并不会显现在屏幕上,所以需要特别留意输出的信息的管线重导的问题呦!另外,如何将该程序叫回来屏幕上面执行呢?就使用 fg 即可!当然啰,也可以使用 [Ctrl]+z 来将目前正在进行当中的工作丢到背景底下!那么摆在背景底下执行有何好处呢?!最大的好处就是不怕被『 [Ctrl]+c 』这个中断指令来中断了!!

    2. 将"当前"作业放到后台"暂停":[Ctrl]+z

    语法: 

    [root @test /root ]# command  
    [root @test /root ]# ^Z          <==按下[Ctrl]加上 z 键  
      
    参数说明:  
    范例:  
    [root @test /root]# vi .bashrc  
    ^Z                        <==在 vi 当中的一般模式中键入[Ctrl]+z  
    [1]+  Stopped             vi .bashrc    <==这里会显示将数据丢到背景当中了!  
    [root @test /root]#   

    说明: 

    如果你正在进行 vi ,而且是在编辑一个重要数据文件,但是偏偏你想起有的程序需要留意,因此需要退出 vi ,不过,你并不想这个时候储存退出 vi ,那么该如何是好呢?!就将资料丢到背景里面去吧!以上面的例子来说明,当你在执行编辑 /root/.bashrc 这个档案时,想要暂时离开,那么就直接在 vi 的『一般模式』当中输入[Ctrl] - z (小写)按键,那么系统就会告诉你『工作项目 [1] 在背景当中,而其状态为[Stopped]亦即是停止的状态!』,并且会离开 vi 进入到 command line 当中,等待使用者输入指令!那如果想要回到 vi 呢?!呵呵,就需要使用 jobs 配合 bg 或 fg 啰!

    3. 观察当前后台作业状态:jobs
    语法: 

    [root @test /root ]# jobs [-lrs]  
    -l : 除了列出作业号外,同进列出PID  
    -r : 仅列出正在后台运行(run)的作业  
    -s : 仅列出正在后台暂停(stop)的作业  
    范例:  
    [root @test /root]# vi .bashrc  
    ^Z                        <==在 vi 当中的一般模式中键入[Ctrl]+z  
    [1]+  Stopped             vi .bashrc    <==这里会显示将数据丢到背景当中了!  
    [root @test /root]# jobs  
    [1]+  Stopped             vi .bashrc    <==显示有一个工作在背景下,状态为停止。  

    说明: 

    刚刚我们提到的 & 与 vi 在背景下执行,那么你怎么知道目前你所进行的背景底下的工作有哪些呢?!很简单,就是使用 jobs 就可以观察到啦!以上式为例,使用 jobs 就可以知道目前的背景中工作项目有 vi .bashrc 这一项!那个中括号([])里面的数字就是 jobs 的代号啰!

    4. 将后台作业拿到前台处理:fg
    语法:  

    [root @test /root ]# fg %number  

    [root @test /root ]# bg %number  

    参数说明:  

    %      :表示 jobs 的作业号码,%是可有可无的  

    范例:  

    [root @test /root]# find / -name test  
    ^Z  
    [1]+  Stopped                 find / -name testing  
    [root @test /root]# vi .bashrc  
    ^Z  
    [2]+  Stopped                 vi .bashrc    <==这里会显示将数据丢到背景当中了!  
    [root @test /root]# jobs  
    [1]-  Stopped                 find / -name testing  
    [2]+  Stopped                 vi .bashrc  
    [root @test /root]# fg %1     <==取出[1]作业运行  
    [root @test /root]# jobs  
    [1]-  Running                 find / -name testing &  
    [2]+  Stopped                 vi .bashrc  
    [root @test /root]# fg %2     进入 vi 画面啰!

    说明: 

    OK!那么如何来了解 jobs 的后台(bg)与前台(fg)的管控呢?!这里请注意啰!这个bg 是将『背景当中的程序由 stopped 变成 Running 』的一个手段,至于fg『则是将背景中的指令移到屏幕上来动作』,那你怎么知道你的背景当中有多少的工作(jobs)在进行呢?!就是执行 jobs 来看看背景程序的代号啰!然后以 bg %number 来将资料在背景中执行,而 fg %number 则是将代号为 number 的程序移动到屏幕前面动作!

    5. 让作业在后台运行:bg
    语法:  

    [root @test /root ]# bg %number  
    参数说明:  
    %      :表示 jobs 的作业号码,%是可有可无的  

    注意:[ctrl]-z是将当前作业放到后台去"暂停",而 bg 是让一个作业在后台运行。


    6. 管理后台作业:kill 
    语法: 

    [root @test /root ]# kill -sigal %number  
    参数说明:  
    signal  
        -1  :重新读取一次参数设定档(类似 reload )  
        -2  :使用者中断该工作,类似 [Ctrl]+c 来中断一个工作  
        -9  :立刻杀掉一个工作,不论该工作是否为僵尸程序  
        -15 :以正常的程序方式停止一个工作(这是默认值)  
    范例:  
    [root @test /root]# jobs  
    [1]+  Stopped                 vi .bashrc  
    [root @test /root]# kill -9 %1   

    说明: 

    如果想要直接杀掉背景工作中的项目,可以直接输入 kill 来杀掉!但是由于默认是将该程序停止而已,不见得一定可以将该工作清除干净,因此需要送出一个讯号,告诉系统你就是要砍掉该程序!这个时候就使用 kill -9 吧另外, -15 称为 terminal ,是以一般的正常程序砍掉一个 jobs ,而 –9 有『强制终止』的意思。

    二. 进程管理

    1. 查看进程
    1.1 ps 

    语法: 

    [root @test /root ]# ps -aux  
    
    参数说明:  
    
    -a  : 与终端无关的所有的进程  
    
    -u  : 有效用户的相关进程  
    
    -x  : 通常与a参数一起使用,可以列出较完整的信息  
    
    范例:  
    
    [root @test /root]# ps -aux  
    
    列出当前所有正在内存中的进程  
    
    USER       PID %CPU %MEM   VSZ  RSS TTY      STAT START   TIME COMMAND  
    
    root         1  0.0  0.1  1384  468 ?        S    Mar31   0:05 init [3]  
    
    root         2  0.0  0.0     0    0 ?        SW   Mar31   0:00 [keventd]  
    
    ........   
    
    [root @test /root]# ps -l  
    
    将当前属于自己这次登录的PID与相关信息显示出来。  

    说明: 

    通常使用『 ps -aux 』这个参数来列出所有的信息以提供自己检查程序的问题!在上面的程序列出当中,说明如下: 
    USER:说明该程序是属于哪一个人的; 
    PID:该程序的代号; 
    %CPU:代表该程序使用了多少 CPU 资源; 
    %MEM:代表该程序使用了多少的 RAM ; 
    VSZ, RSS:占去的 ram 的大小( bytes );
    TTY:是否为登入者执行的程序?若为 tty1-tty6 则为本机登入者,若为 pts/?? 则为远程登入者执行的程序
    STAT:该程序的状态,( R )为可执行的,( S )为该程序正在睡眠中,( T )正在侦测或者是停止了,(Z)僵尸程序,就是 zombie 死掉的程序啦!需要以 kill 除去啰!
    START:该程序开始的日期; 
    TIME:该程序跑了多久的时间? 
    COMMAND:该程序的内容啦! 
    这是一个很有用的指令,尤其是在侦测系统的状态时!

    1.2 top 
    语法: 

    [root @test /root ]# top [-d] | top [-bnp]  

    参数说明:  

    -d : 后面接秒数,即整个进程画面更新的秒数,默认是5秒。  
    
    -b : 以批处理的方式执行top.  
    
    -n : 与-b搭配,就是需要进行几次top的输入结果。  
    
    -p : 指定某些个PID来进行观察。  
    
    在执行 top 的程序中,可以输入下面的字符以进行排序  
    
    A  :以 age 亦即是执行的先后程序进行排序  
    
    T  :由启动的时间排序  
    
    M  :以所占的 memory 的大小排序  
    
    P  :以所耗用的 CPU 资源排序  
    
    范例:  
    
    [root @test /root]# top  
    
    11:55pm  up 8 days,  7:40,  1 user,  load average: 0.22, 0.14, 0.10  
    
    71 processes: 69 sleeping, 2 running, 0 zombie, 0 stopped  
    CPU states: 24.6% user,  3.7% system,  0.0% nice, 71.5% idle  
    Mem:   255892K av,  222300K used,   33592K free,       0K shrd,   48084K buff  
    Swap:  289128K av,    8184K used,  280944K free                  110472K cached  
      PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND  
     9898 root       9   0  5976 5976  1364 S     5.5  2.3   0:00 mrtg  
     4744 apache    14   0  5312 5052  3764 S     2.1  1.9   0:16 httpd  
     9189 apache    14   0  4520 4256  3752 S     1.9  1.6   0:01 httpd  
     9187 apache    10   0  4544 4276  3800 S     1.7  1.6   0:01 httpd  
     9212 mysql      9   0  7280 4772  2716 S     0.7  1.8   0:00 mysqld  
     9888 root      12   0  1064 1064   832 R     0.7  0.4   0:00 top  
     4842 mysql     10   0  7280 4772  2716 S     0.5  1.8   0:06 mysqld  
     9218 mysql     10   0  7280 4772  2716 S     0.5  1.8   0:00 mysqld  

    说明: 
    使用 ps 是一个不错的管理工具,但是 ps 毕竟不是动态的,若使用 top 的话,可以用动态(每五秒钟更新一次)的方式来侦测程序的进行!而且在程序进行中,还可以使用 P 来以 CPU 耗用资源排序、使用 M 来以 memory 占用大小排序等等,非常好用的管理工作!有空的话多以 man top 来玩一玩吧!

    1.3 pstree

     [root@linux ~]#pstree [-Aup]  

    参数:  

    -A : 各进程树之间以ASCII字符来连接 (+,-,|)  

    -p : 同时列出每个进程的PID  

    -u : 同时列出每个进程的所属账号名称  

     

    2.删除进程 kill 
    语法: 

    [root @test /root ]# kill -signal PID  

    参数说明:  
    那个 -signal 跟上面的 kill 一样:  
    -9  :杀掉该程序  
    -15 :停止该程序!  
    范例:  
    [root @test /root]# kill -9 2380   

    说明: 

    要杀掉一个程序的时后,自然需要知道该程序的 PID 才行!另外,需要注意的是,由于很多的程序都有附属关系,例如 sendmail 可能会同时开启相当多的程序在工作(如果邮件量很大的时后!)所以,如果砍掉的是『子程序』是无法将整个程序杀掉的!而要知道该程序的代号(PID)自然就得善用 ps, top 等工具啰! 此外,您常常会发现在一些 scripts 里面,会写着kill –1 PID 的字样,那个 –l 是让该 PID 重新读取一次设定档的意思,最常发现在 syslogd 这个 daemon 呢!
    注意:这个kill与上面删除作业的kill的区别,一个为 %jobNumber(作业号名) 一个为PID(进程ID)

  • 相关阅读:
    设计模式 设计原则 何为设计
    面向对象 多态
    两个简易的对拍程序
    各类有用的神奇网站
    乘法逆元
    树链剖分
    Markdown的用法
    vimrc 的配置
    luogu【P1144】最短路计数
    【娱乐】收录各种神奇知乎问答
  • 原文地址:https://www.cnblogs.com/hf8051/p/4519626.html
Copyright © 2020-2023  润新知