linux学习-补充

78 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第12天,点击查看活动详情

进程相关

作为上一篇的补充

工作管理

  • job control
  • 概念
    • 登入系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理
  • 前提及限制
    • 这些工作出发的进程必须来源于你shell的子进程[只管理自己的shell]
    • 前景 你可以控制与下达指令的这个环境称为前景的工作
    • 背景 可以自行运作的工作,你无法通过[ctrl+c]终止它,可使用bg/fg来呼叫该工作
    • 背景中执行的进程不能等待 teminal[终端]/shell 的输入
  • 管理
    • 直接将指令丢到背景中执行的[&]
    • 将目前的工作丢到背景中暂停[ctrl+z]
    • 查看目前的背景工作状态[jobs]
    • 将背景工作拿到前景来处理[fg %jobnumber]
    • 让工作在背景下的状态变成运作中[bg %jobnumber]
    • 管理背景当中的工作[kill -signal %jobnumber]
      • -9 强制移除工作
      • -15 正常移除工作

进程的查看

  • ps
    • 命令功能
      • 将某个时间点的进程运行情况撷取下来
    • 命令格式
      • ps [参数|输出格式规划]
    • 命令参数
      • -A 都展示出来
      • -a 不与终端[terminal]有关的所有进程[process]
      • -u 有效使用者相关的进程
      • x 通常与a这个参数一起使用,可列出较完整的信息
    • 输出格式规划
      • l 较长较详细的将PID 的信息列出
      • j 工作的格式
      • -f 做一个更完整的输出
    • 命令实例
          仅观察自己的bash相关进程
          [llllljian@llllljian-virtual-machine ~ 11:30:44 #4]$ ps -l
          F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
          0 S  1000  1582  1581  0  80   0 -  1738 wait   pts/0    00:00:00 bash
          0 R  1000  1694  1582  0  80   0 -  1952 -      pts/0    00:00:00 ps
      
          F 进程旗标,说明这个进程的权限
              4 权限为root
              1 此子进程仅进行复制[fork]而没有进行实际执行[exec]
          S 进程状态
              R[Running] 该程序正在运行中
              S[Sleep] 该进程目前处于睡眠状态,但是可被唤醒
              D 不可唤醒的睡眠状态,通常这支程序可能在等待I/O的情况
              T 停止状态,可能是在工作控制[北京暂停]或除错状态
              Z 僵尸状态,进程已经终止却无法移除到内存外
          UID/PID/PPID 代表此进程被该UID所拥有/进程的PID号码/此进程的父进程PID
          C 代表CPU使用率,单位是百分比
          PRI/NI 进程执行的优先级,PRI越小优先级越高
          ADDR 该进程在内存的哪个部分,如果是running的进程一般为- 
          SZ 该进程用掉多少内存
          WCHAN 该进程是否运作中,如果是running的进程一般为- 
          TTY 登入者的终端机位置,若为远程登录则使用动态终端接口[pts/n]
          TIME 该进程实际花费CPU运作的时间
          CMD 造成该进程的触发程序指令
      
  • top
    • 命令功能
      • 动态观察进程的变化
    • 命令格式
      • top [-d 数字] | top [-bnp]
    • 命令参数
      • d 整个进程更新的秒数,预设是5秒
      • b 执行几次top,一般配合数据重导向输出到文件
      • n 需要进行几次的top输出结果
      • p 指定某些PID进行观测

进程的终止

  • 进程退出的场景:

    • 代码运行完毕,结果正确
    • 代码运行完毕,结果不正确
    • 代码异常终止
  • 进程常见退出方法

    • 正常终止
      • 正常退出返回码为0
      • 从main返回
      • 调用exit
      • _exit
    • 异常退出:
      • ctrl+C
      • kill
      • abort()
  • 查看进程退出码

    • 可以用echo$?查看进程的退出码
    • echo $?: 查看上一个退出码 退出码返回0~255 只用了int的8个比特位,其余位有别的用途
  • exit所做的工作

    • 执行用户通过atext或on_exit定义的清理函数
    • 关闭所有打开的流,所有的缓冲数据均被写入
  • 调用_exit.

    • 回调处理函数atexit(函数名): 在程序结束前执行.有32个上限,运行顺序与定义顺序相反
  • _exit与exit区别

    • _exit()直接终止,清理缓冲区.
    • exit()直接退出程序
    • _exit是系统调用,exit最终也会调用_exit

进程的撤销(销毁)

  • 关闭软中断
  • 回收资源(如关闭文件)
  • 将进程的状态置为僵尸态
  • 写记账信息
  • 转进程调度