进程管理

 linux中,所有进程都是init进程的后代进程,init的进程号是1,也有进程号是0的进程
进程状态
  running 运行
  ready(runnable) 就绪
  sleep
    interruptable 用户随时可以唤醒 可打断睡眠
    uninterruptable 通常在等待I/O操作,非可打断睡眠
  stop 停止  不能被调度(无外力的情况下)
  zombie 僵死 父进程处理后事
查看进程信息的命令
 #pstree 查看进程树
 #ps(process state) 快照当前与用户相关的前台进程的信息以显示
    VSZ 虚拟内存集
    RSS 物理内存空间 在TOP中此项是RES
    STAT S sleep 可中断睡眠
       R Running 运行
       D 不可中断的睡眠
       T 停止态
       Z 僵死态
       < 高优先级的进程
       s 发起会话的进程
       N 低优先级的进程
       l 多线程的进程 MultiThread
       + 前台进程
     支持BSD的风格的命令(选项不带-)
     a 显示主要与终端相关的进程
     x 显示主要与终端无关的进程
     u 显示与用户相关的信息
     以上三个选项配合起来使用
      #ps aux 显示与用户相关的所有进程
   -e =ax 显示所有进程信息
   -f     显示进程详细信息
      -ef 显示所有进程的详细信息
   -j     以作业方式显示
   -H     显示进程森林
      -ejH 以作业方式显示详细信息和进程树
      -aujf 显示进程树
   -o      显示用户指定字段
   #ps axo pid,tty,cmd 显示所有进程的进程号,终端,和进程名
   #ps efo pid uid     显示所有进程的详细信息中进程号和用户ID
     Attention
        watch  周期性的显示命令执行情况
           -n 指定周期,单位秒
           -n 1
           -n .5 0.5s
         watch -n .5 `命令`
   pgrep (process grep)
      -U 查找与某一用户相关的进程
      -G 查找与某一组相关的进程
      -t 查找终端进程
      -P 查找父进程为PPID的进程
   pgrep pattern 显示符合pattern的进程号
   pidof 查找某一正在运行进程的pid
进程通信
  1.共享内存空间
  2.传递信号 signal 可相互传递
       #kill -l 显示信号
       #man 7 singal 显示信号
    signal:
     1)SIGHUP     通知某个进程重读配置文件
     2)SIGINT    类似ctrl+c 使进程终止
     9)SIGKILL   杀死某一进程,不计后果,其结果是其子进程很成为无处可去的进程
     15)SIGTERM  杀死某一进程,但给予一定时间处理必要工作
     18)SIGCONT  外力唤醒进程(Stop态的进程)
     19)SIGSTOP  终止
       Attention:序号不仅表示其索引顺序,也同样可以通过序号引用信号
       #kill -SIGHUP PID 将信号SIGHUP发送给pid为PID的进程
 same as #kill -1      PID
      #killall process_name 杀死所有process_name进程
      #pkill -SIGNAL  pattern  查找进程通过名字或者其他属性
进程优先级
  动态优先级
  静态优先级
       进程信息中的nice值即表示优先级 -20到19对赢优先级的100到139 数值越大优先级越小
       普通用户只能提高nice值也就是只能降低自己的优先级
       进程创建时,nice被指定为0对应120
       #nice 进程还未运行,设置初始nice值
         #nice -n num 进程名
       #renice 进程已启动
         #renice num PID(数字)
       #ps -efo nice,comm|cmd,pid 打印所有进程的nice值,进程名和进程号
作业job
  1.前台作业/进程
       跟用户相关,执行开始之后,结束之前始终占据命令提示符的进程
  2.后台做紧/进程
       执行开始后,立即释放命令提示符,无论进程结束与否
     前台-->后台,ctrl+z挂起不执行了
     后台-->前台,fg
    3.jobs 查看后台作业列表
        #fg 不带任何参数 调回jobs列表中带+号的那个作业
        #fg [%]jnum jnum是作业列表每行第一个显示的数字
       希望进程送到后台继续执行
         1.#bg [%]jum
         2.kill %num 此处的%不能省略 因为kill num 表示杀死pid为num的进程
       前台发起进程,前台终端退出,则进程终止
        #nohup 进程名 使进程脱离跟终端的这种从属关系,即使终端关闭,也可工作
      #command & 将command直接送入后台执行,最好非交互的命令
   4.top   same as windows下的任务管理器 每隔5秒刷新
           "1" 展开|收起 各个cpu状况信息(最少有2个cpu才可以)
           k,kill某个进程
         字段含义
              load average num1 num2 num3
                  load average 平均负载,平均等待队列时间长度
                  num1          过去1分钟平均队列长度
                  num2          过去5分钟平均队列长度
                  num3          过去15分钟平均队列长度
          #top -d(delay 延迟) num  单位秒 延迟多少秒刷新
          #top -b -n 3
             -b 工作在批处理模式下
             -n 在批处理模式下,刷新几次结束命令
             3  刷新3结束命令