进程管理

1.1 程序与进程的关系

程序 -> 软件

  • 程序是保存在尾部存储介质(如硬盘,光盘)等中的可执行静态

  • 静态保存代码

    进程:

  • 加载到内存中的程序代码(计算机程序,由cup运行)

  • 动态执行的代码

  • 父子进程:每一个进程可以创建爱你一个或多个进程

  • systemd为系统请懂得第一个程序:pid号为1

  • 守护进程:常驻内存,与终端无关的进程(自己在系统后台执行)

  • 用户进程:通过终端执行加载的程序

1.2 ps命令:

  • 查看静态的进程统计量

  • linux上进程有5种状态:

    1. 运行(正在运行或在运行队列中等待)

    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)

    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)

    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)

    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

  • ps工具标识进程的5种状态码:

    D 不可中断 uninterruptible sleep (usually IO)

    R 运行 runnable (on run queue)

    S 中断 sleeping

    T 停止 traced or stopped

    Z 僵死 a defunct (”zombie”) process

  • 参数
    a 显示所有进程

    -a 显示同一终端下的所有程序

    -A 显示所有进程

    c 显示进程的真实名称

    -N 反向选择

    -e 等于“-A”

    e 显示环境变量

    f 显示程序间的关系

    -H 显示树状结构

    r 显示当前终端的进程

    T 显示当前终端的所有程序

    u 指定用户的所有进程

    -au 显示较详细的资讯

    -aux 显示所有包含其他使用者的行程

    -C<命令> 列出指定命令的状况

    --lines<行数> 每页显示的行数

    --width<字符数> 每页显示的字符数

    --help 显示帮助信息

    --version 显示版本显示

  • ps aux #查看所有进程
    linux系统的进程_默认值

    1. user:,用户名字

    2. pid:pid号

    3. %cup:cup使用率

    4. %mem:内存使用率

    5. vsz:虚拟内存

    6. Rss: 常驻物理内存

    7. tty:终端 “?”表示为之活着不需要终端

    8. stat:状态
      S:可中断的睡眠
      R:就绪或者运行的状态
      Z:僵死状态
      <:高优先级进程
      +:前台进程组中的进程

    9. start:使用时间

    10. time:运行时间

    11. command:命令

  • ps -elf #比aux多一个ppid号和一个ni:启动时候的优先级负数

  • ps aux | grep "sshd" #查看sshd进程是否活着
    linux系统的进程_优先级_02
    最后一个进程是查询sshd时的进程,前面两个是运行的进程

  • ps -C sshd --no-headers #查询进程名称且检查是否存活
    linux系统的进程_默认值_03

1.3 top命令:

  • 查看进程动态信息:以当前终端全屏交互式界面显示,每三秒刷新一次
    linux系统的进程_用户名_04

  • 第一组,第一行:表示全局
    top - 03:57:48 :当前系统时间 24 min :表示系统运行时间 3 users :表示当前登录3个用户 load awerage : 系统平均负载(1,5,15)
    ``

  • 第二组,第二行 :系统任务Tasks信息
    total:总进程数;running:正在运行的进程数;sleeping:休眠的进程数;stopped:中止的进程数;zomibe:僵死无响应的进程数

  • 第三组,第三行:CPU占用信息
    us:用户占用;sy:内核占用;ni:优先级占用;id:空闲CPU;

  • 第四组,第四行:内存占用mem信息:total
    used总交换空间;free:已用交换空间;cached:缓存空间

  • 参数:
    -d:指定刷新间隔时间、
    -b: 一批量处理模式操作(非交互)
    -n:指定循环显示次数
    -u:指定用户名
    -p: 指定进程号

  • eg:

    top -d 1  #隔离一秒刷新
    top -b -n2  #已批量的方式循环显示2两次
    top -u 用户名  #指定用户进程
    top -p 进程号(pid号)
    
  • 常用交互命令
    K:终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号 15。在安全模式中此命令被屏蔽。

    i:忽略闲置和僵死进程。这是一个开关式命令。

    q:退出程序

    r:重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

    S:切换到累计模式。

    s:改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

    f或者F:从当前显示中添加或者删除项目。

    o或者O:改变显示项目的顺序

    l:切换显示平均负载和启动时间信息。

    m:切换显示内存信息。

    t:切换显示进程和CPU状态信息。

    c:切换显示命令名称和完整命令行。

    M:根据驻留内存大小进行排序。

    P:根据CPU使用百分比大小进行排序。

    T:根据时间/累计时间进行排序。

    W:将当前设置写入~/.toprc文件中。

1.3. pstree命令:

  • 用ASCII字符显示进程结构,主要看父子进程关系
    linux系统的进程_用户名_05
  • -p:列出对应的pid号
  • -u:列出对应的用户名
  • -a: 列出完整的用户信息

1.4. 终止进程:

  • Ctrl+c

  • kill命令:-9 ipd号:强制杀死
    -l 信号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
    -a 当处理当前进程时,不限制命令名和进程号的对应关系
    -p 指定kill 命令只打印相关进程的进程号,而不发送任何信号
    -s 指定发送信号

  • killall命令
    -Z 只杀死拥有scontext 的进程
    -e 要求匹配进程名称
    -I 忽略小写
    -g 杀死进程组而不是进程
    -i 交互模式,杀死进程前先询问用户
    -l 列出所有的已知信号名称
    -q 不输出警告信息
    -s 发送指定的信号
    -v 报告信号是否成功发送
    -w 等待进程死亡
    --help 显示帮助信息
    --version 显示版本显示
    -u 指定用户

  • pkill命令:根据指定条件终止
    pkill 和killall 应用方法差不多,也是直接杀死运行中的程式;如果你想杀掉单个进程,请用kill 来杀掉。