zoukankan      html  css  js  c++  java
  • Linux 进程管理

    CentOS-Logo

    Windows有任务管理器来管理进程,Linux也有相应的命令来管理进程。


    查看进程

    ps

    • 查看静态的进程统计信息

    a:显示当前终端下的所有进程信息,包括其他用户的进程。与x选项结合时将显示系统中所有的进程信息。
    u:使用以用户为主的格式输出进程信息。
    x:显示当前用户在所有终端下的进程信息。
    -e:显示系统内的所有进程信息。
    -l:使用长(Long)格式显示进程信息。
    -f:使用完整的(Full)格式显示进程信息。

    [root@localhost ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.3 128164  6832 ?        Ss   15:50   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root          2  0.0  0.0      0     0 ?        S    15:50   0:00 [kthreadd]
    root          3  0.0  0.0      0     0 ?        S    15:50   0:00 [ksoftirqd/0]
    root          5  0.0  0.0      0     0 ?        S<   15:50   0:00 [kworker/0:0H]
    root          6  0.0  0.0      0     0 ?        S    15:50   0:00 [kworker/u256:0]
    root          7  0.0  0.0      0     0 ?        S    15:50   0:00 [migration/0]
    //有很多,不写。
    

    USER:启动该进程的用户账号的名称。
    PID:该进程在系统中的数字ID号,在当前系统中是唯一的。
    %CPUCPU占用的百分比。
    %MEM:内存占用的百分比。
    VSZ:占用虚拟内存(swap空间)的大小。
    RSS:占用常驻内存(物理内存)的大小。
    TTY:表明该进程在哪个终端上运行。?表示未知或不需要终端。
    STAT:显示进程当前的状态,如S可中断休眠进程D不可中断休眠进程R运行Z僵死<高优先级N低优先级s父进程l多线性进程+前台进程。对处于僵死状态的进程应该予以手动终止。
    START:启动该进程的时间。
    TIME:该进程占用的CPU时间。
    COMMAND:启动该进程的命令的名称。

    [root@localhost ~]# ps -elf
    F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
    4 S root          1      0  0  80   0 - 32041 ep_pol 15:50 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    1 S root          2      0  0  80   0 -     0 kthrea 15:50 ?        00:00:00 [kthreadd]
    1 S root          3      2  0  80   0 -     0 smpboo 15:50 ?        00:00:00 [ksoftirqd/0]
    1 S root          5      2  0  60 -20 -     0 worker 15:50 ?        00:00:00 [kworker/0:0H]
    1 S root          6      2  0  80   0 -     0 worker 15:50 ?        00:00:00 [kworker/u256:0]
    1 S root          7      2  0 -40   - -     0 smpboo 15:50 ?        00:00:00 [migration/0]
    //有很多,不写。
    

    PPID:当前进程的父进程
    CCPU占用
    PRI:用户态的进程优先级
    NI:内核态的进程优先级,取值范围-20~19,数值越低,优先级越高。
    ADDR-表示正在运行
    SZ:虚拟内存swap占用
    WCHAN:当前进程在内核中的名称

    top

    • 查看进程动态信息,每3s刷新一次
    [root@localhost ~]# top
    top - 19:27:16 up  3:36,  1 user,  load average: 0.00, 0.01, 0.05
    Tasks:  98 total,   1 running,  97 sleeping,   0 stopped,   0 zombie
    %Cpu(s):  0.0 us,  6.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem :  1867024 total,  1348360 free,   148256 used,   370408 buff/cache
    KiB Swap:  2097148 total,  2097148 free,        0 used.  1525688 avail Mem
    
       PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
         1 root      20   0  128164   6832   4064 S  0.0  0.4   0:02.43 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.25 ksoftirqd/0
         5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
         6 root      20   0       0      0      0 S  0.0  0.0   0:00.59 kworker/u256:0
         7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    //有很多,不写。
    

    Tasks系统任务信息:total总进程数,running正在运行的进程数,sleeping休眠的进程数,stopped中止的进程数,zombie僵死无响应的进程数。

    CPU占用信息:us用户占用,sy内核占用,ni优先级调度占用,id空闲CPU,waI/O等待占用,hi硬件中断占用,si软件中断占用,st虚拟化占用。

    Mem内存占用信息:total总内存空间,free空闲内存,used已用内存,buff/cache,物理内存和交换内存的缓冲区总和。

    Swap交换空间占用:total总交换空间,free空闲交换空间,used已用交换空间,avail Mem可用物理空间。

    pgrep

    • 过滤查询进程信息

    -l:同时输出对应的进程名,否则只输出PID,不便于查看。
    -U:查询特定用户的进程
    -t:查询特定终端运行的进程

    [root@localhost ~]# pgrep -l "login"
    39654 systemd-logind
    
    [root@localhost ~]# pgrep -l -U root -t tty1
    40422 X
    

    pstree

    • 查看进程树

    -a:列出完整的命令信息
    -u:列出对应的用户名
    -p:列出对应的PID

    [root@localhost ~]# pstree -aup
    systemd,1 --switched-root --system --deserialize 21
      ├─ModemManager,39616
      │   ├─{ModemManager},39631
      │   └─{ModemManager},39649
      ├─NetworkManager,39701 --no-daemon
      │   ├─dhclient,39841 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
      │   ├─{NetworkManager},39704
      │   └─{NetworkManager},39709
    //有很多,不写。
    
    • 不加u,以指定用户作为参数,可查看属于指定用户的进程数结构。
    [root@localhost ~]# pstree -ap ll
    未发现进程。
    

    控制进程

    &

    • 运行较长时间的操作时,命令后面加&符号,放到后台运行
    [root@localhost ~]# dd if=/dev/zero of=~/test.tmp bs=1M count=2048 &
    [1] 8773
    

    Ctrl + C

    • 终止正在执行的进程
    [root@localhost ~]# ping www.baidu.com
    PING www.a.shifen.com (183.232.231.174) 56(84) bytes of data.
    64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=1 ttl=128 time=34.6 ms
    64 bytes from 183.232.231.174 (183.232.231.174): icmp_seq=2 ttl=128 time=34.9 ms
    ^C
    --- www.a.shifen.com ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1001ms
    rtt min/avg/max/mdev = 34.660/34.823/34.987/0.248 ms
    

    Ctrl + Z

    • 将前台正在执行的进程调入后台并暂停执行
    [root@localhost ~]# dd if=/dev/zero of=~/data.tmp bs=1M count=2048
    ^Z
    [1]+  Stopped                 dd if=/dev/zero of=~/data.tmp bs=1M count=2048
    

    jobs

    • 查看当前终端在后台运行的进程任务

    -l:显示进程对应的PID

    [root@localhost ~]# jobs -l
    [1]+  8778 Stopped                 dd if=/dev/zero of=~/data.tmp bs=1M count=2048
    

    bg

    • 将后台中暂停执行的任务恢复运行,并继续在后台运行,需指定任务编号作为参数
    [root@localhost ~]# bg 1
    

    fg

    • 将后台中的任务恢复到前台运行,需指定任务编号作为参数
    [root@localhost ~]# fg 1
    

    kill

    • 通过PID终止进程运行,无特定选项时,给程序发送终止信号并正常退出运行

    -9:强制终止

    [root@localhost ~]# vi testfile
    
    [1]+  Stopped                 vi testfile
    [root@localhost ~]# jobs -l
    [1]+  8935 Stopped                 vi testfile
    [root@localhost ~]# kill 8935
    [root@localhost ~]# jobs -l
    [1]+  8935 Stopped                 vi testfile
    [root@localhost ~]# kill -9 8935
    [root@localhost ~]# jobs -l
    [1]+  8935 Killed                  vi testfile
    

    killall

    • 通过进程名终止运行,需要结束多个相同名称的进程时,killall更方便。
    [root@localhost ~]# vi testfile1
    
    [1]+  已停止               vi testfile1
    [root@localhost ~]# vi testfile2
    
    [2]+  已停止               vi testfile2
    [root@localhost ~]# jobs -l
    [1]-  1803 停止                  vi testfile1
    [2]+  1804 停止                  vi testfile2
    [root@localhost ~]# killall -9 vi
    [1]-  已杀死               vi testfile1
    [2]+  已杀死               vi testfile2
    [root@localhost ~]# jobs -l
    

    pkill

    • 特定条件终止,与pgrep类似

    -U:指定用户
    -t:指定终端

    [root@localhost ~]# pgrep -l -U "ll"
    1875 gnome-keyring-d
    1893 gnome-session-b
    //有很多,不写
    [root@localhost ~]# pkill -9 -U "ll"
    [root@localhost ~]# pgrep -l -U "ll"
    
  • 相关阅读:
    cocos2d-x CCNotificationCenter一个优化想法
    【备忘】尾调用(尾递归)--来自维基百科
    [转] 关于Mongodb的全面总结,学习mongodb的人,可以从这里开始
    [转]编程修养
    DirectX11 SDK 例程报错解决方法
    unity3d Vector3.Lerp解析
    unity3d 三分钟实现简单的赛车漂移
    Unity 5.3.1 No Android/IOS module loaded
    unity3d 音频无缝循环
    unity3d 扩展NGUI Tweener —— TweenTime
  • 原文地址:https://www.cnblogs.com/llife/p/11421527.html
Copyright © 2011-2022 走看看