进程管理

ps top dstat iotop bg fg nohup 并行

进程优先

   系统优先级:数字越小,优先级越高
      0-139(CentOS4,5) 
        各有140个运行队列和过期队列 
      0-98,99(CentOS6) 
   实时优先级:99-0 值最大优先级最高 
   nice值:-20到19,对应系统优先级100-139或99 
   Big O:时间复杂度,用时和规模的关系 O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n) 

进程相关概念 

   进程内存:
   Page Frame: 页框,用存储页面数据,存储Page 4k 
   LRU:Least Recently Used 近期最少使用算法,释放内存 物理地址空间和线性地址空间 
   MMU:Memory Management Unit负责转换线性和物理地址 
   TLB:Translation Lookaside Buffer 翻译后备缓冲器,用于保存虚拟地址和物理地址 映射关系的缓存

IPC: Inter Process Communication 

   同一主机: signal:信号 
     shm: shared memory 
     semaphore:信号量,一种计数器 
   不同主机:socket: IP和端口号
     RPC: remote procedure call 
     MQ:消息队列,Kafka,ActiveMQ

进程状态 

 Linux内核:抢占式多任务 
   进程类型: 
     守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程 
     前台进程:跟终端相关,通过终端启动的进程 注意:两者可相互转化
   进程状态: 
     运行态:running 
     就绪态:ready 
     睡眠态: 
       可中断:interruptable 
       不可中断:uninterruptable 
     停止态:stopped,暂停于内存,但不会被调度,除非手动启动 
     僵死态:zombie,结束进程,父进程结束前,子进程不关闭 

Linux系统状态的查看及管理工具:

    pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job
bg, fg, nohup 

pstree
  pstree -p查看进程树
┌─[root@yyc]─[~]
└──╼ #pstree -p
init(1)─┬─NetworkManager(1758)
 ├─abrtd(2094)
 ├─acpid(1854)
 ├─atd(2136)
 ├─auditd(1637)───{auditd}(1638)
 ├─automount(1945)─┬─{automount}(1946)
 │ ├─{automount}(1947)
 │ ├─{automount}(1962)
 │ └─{automount}(1965)

ps
 ps [OPTION]... 
 支持三种选项: 
   UNIX选项 如-A -e 
   BSD选项 如a 
   GNU选项 如--help 
选项:默认显示当前终端中的进程 
 a 选项包括所有终端中的进程 
 x 选项包括不链接终端的进程 
 u 选项显示进程所有者的信息 
 f 选项显示进程树,相当于 --forest 
 k|--sort 属性 对属性排序,属性前加- 表示倒序 
 o 属性… 选项显示定制的信息 pid、cmd、%cpu、%mem 
 L 显示支持的属性列表 

┌─[root@yyc]─[~]
└──╼ #ps axo cmd,pri,ni,psr,vsz,rss,rtprio,user
CMD           PRI  NI PSR VSZ  RSS  RTPRIO USER
/sbin/init    19   0   0 19356 1560   -    root
[kthreadd]    19   0   0  0     0     -    root
[migration/0] 139  -   0  0     0     99   root
[ksoftirqd/0] 19   0   0  0     0     -    root
[stopper/0]   139  -   0  0     0     99   root
[watchdog/0]  139  -   0  0     0     99   root
[migration/1] 139  -   1  0     0     99   root

  ps常见选项 
   -C cmdlist 指定命令,多个命令用,分隔 
   -L 显示线程 
   -e 显示所有进程,相当于-A 
   -f 显示完整格式程序信息 
   -F 显示更完整格式的进程信息
   -H 以进程层级格式显示进程相关信息 
   -u userlist 指定有效的用户ID或名称 
   -U userlist 指定真正的用户ID或名称 
   -g gid或groupname 指定有效的gid或组名称 
   -G gid或groupname 指定真正的gid或组名称 
   -p pid 显示指pid的进程 
   --ppid pid 显示属于pid的子进程 
   -M 显示SELinux信息,相当于Z 
GQ(]NEO2Z%%`P[U~_K%Y
  LWP为light weight process or thread, 轻量级进程,即线程标识符
  NLWP为,number of lwps(threads) in the process, 线程的数量
  ps输出属性 
 
    VSZ: Virtual memory SiZe,虚拟内存集,线性内存
    RSS: ReSident Size, 常驻内存集
    STAT:进程状态
     R:running
     S: interruptable sleeping
     D: uninterruptable sleeping 
     T: stopped 
     Z: zombie 
     +: 前台进程 
     l: 多线程进程 
     L:内存分页并带锁
     N:低优先级进程 
     <: 高优先级进程 
     s: session leader,会话(子进程)发起者 
  ps 

  ni: nice值 
  pri: priority 优先级 
  psr: processor CPU编号
  rtprio: 实时优先级 
   示例:
    ps axo pid,cmd,psr,ni,pri,rtprio 
   常用组合: 
      aux 
     -ef 
     -eFH 
     -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm 
     axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm 
 
  ps示例 
 
    查询你拥有的所有进程:
      ps -x 
    显示指定用户名(RUID)或用户ID的进程:
      ps -fU apache ,ps -fu 48 
    显示指定用户名(EUID)或用户ID的进程: 
      ps -fu wang ,ps -fu 1000 
    查看以root用户权限(实际和有效ID)运行的每个进程:
      ps -U root -u root 
    列出某个组拥有的所有进程(实际组ID:RGID或名称): 
      ps -fG nginx 
    列出有效组名称(或会话)所拥有的所有进程:
      ps -fg mysql ,ps -fG 27 
    通过进程ID来显示所属的进程: 
      ps -fp 1234 
    以父进程ID来显示其下所有的进程,如显示父进程为1154的所有进程:
      ps -f --ppid 1234 
    显示指定PID的多个进程: 
      ps -fp 1204,1239,1263 
    要按tty显示所属进程: 
      ps -ft pst/0  
    以进程树显示系统中的进程如何相互链接: 
      ps -e --forest 
    以进程树显示指定的进程 
      ps -f --forest -C sshd, ps -ef --forest | grep -v grep | grep sshd 
    要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进 程数)列:
      ps -fL -C nginx 
    要列出所有格式说明符:
      ps L 
    查看进程的PID,PPID,用户名和命令:
      ps -eo pid,ppid,user,cmd 
    自定义格式显示文件系统组,ni值开始时间和进程的时间:
      ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime 
    使用其PID查找进程名称:
      ps -p 1244 -o comm=
    要以其名称选择特定进程,显示其所有子进程 
      ps -C sshd,bash 
    查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时 这个参数很有用: 
      ps -C httpd,sshd -o pid= 
    检查一个进程的执行时间 
      ps -eo comm,etime,user | grep nginx  
    查找占用最多内存和CPU的进程: 
      ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head ps -eo pid,ppid,cmd,%mem,%cpu 
--sort=-%cpu | head 
    显示安全信息: 
      ps -eM ps --context 
    使用以下命令以用户定义的格式显示安全信息。 
      ps -eo euser,ruser,suser,fuser,f,comm,label 
    使用watch实用程序执行重复的输出以实现对就程进行实时的监视,如下面的命 令显示每秒钟的监视:
      watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head' 

  按预定义的模式:pgrep

   pgrep [options] pattern
    -u uid: effective user,生效者
    -U uid: real user,真正发起运行命令者 
    -t terminal: 与指定终端相关的进程 
    -l: 显示进程名 
    -a: 显示完整格式的进程名 
    -P pid: 显示指定进程的子进程 
   按确切的程序名称:
     /sbin/pidof pidof bash 

uptime
 
  显示当前时间,系统已启动的时间、当前上线人数,系统平均负载(1、5、10分 钟的平均负载,一般不
会超过1)
  系统平均负载: 指在特定时间间隔内运行队列中的平均进程数 
    通常每个CPU内核的当前活动进程数不大于3,那么系统的性能良好。如果每 个CPU内核的任务数大于5,
那么此主机的性能有严重问题 
    如果linux主机是1个双核CPU,当Load Average 为6的时候说明机器已经被充分使用  

top|htop

top:有许多内置命令: 
排序:
 P:以占据的CPU百分比,%CPU 
 M:占据内存百分比,%MEM 
 T:累积占据CPU时长,TIME+ 首部信息显示: 
 uptime信息:l命令
 tasks及cpu信息:t命令 
 cpu分别显示:1 (数字) 
 memory信息:m命令 
 退出命令:q
 修改刷新时间间隔:s 
 终止指定进程:k 
 保存文件:W  
 栏位信息简介 
  us:用户空间 sy:内核空间 ni:调整nice时间 id:空闲 wa:等待IO时间 hi:硬中断 si:软中断
  (模式切换) st:虚拟机偷走的时间 
  选项: 
  -d #: 指定刷新时间间隔,默认为3秒
  -b: 全部显示所有进程 
  -n #: 刷新多少次后退出
  htop命令:EPEL源 
  选项:
  -d #: 指定延迟时间;
  -u UserName: 仅显示指定用户的进程
  -s COLUME: 以指定字段进行排序 子命令:
  s: 跟踪选定进程的系统调用 
  l: 显示选定进程打开的文件列表 
  a:将选定的进程绑定至某指定CPU核心 
  t: 显示进程树 

free [OPTION] 

 -b 以字节为单位 
 -m 以MB为单位 
 -g 以GB为单位 
 -h 易读格式 
 -o 不显示-/+buffers/cache行
 -t 显示RAM + swap的总和
 -s n 刷新间隔为n秒 
 -c n 刷新n次后即退出

vmstat命令:

  虚拟内存信息 vmstat [options] [delay [count]]
    vmstat 2 5 
  procs: 
    r:可运行(正运行或等待运行)进程的个数,和核心数有关
    b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
  memory: 
    swpd: 交换内存的使用总量 
    free:空闲物理内存总量
    buffer:用于buffer的内存总量 
    cache:用于cache的内存总量 
    swap: 
      si:从磁盘交换进内存的数据速率(kb/s) 
      so:从内存交换至磁盘的数据速率(kb/s) 
    io:
      bi:从块设备读入数据到系统的速率(kb/s) 
      bo: 保存数据至块设备的速率
    system: 
      in: interrupts 中断速率,包括时钟 
      cs: context switch 进程切换速率
    cpu: 
      us:Time spent running non-kernel code 
      sy: Time spent running kernel code id: Time spent idle. Linux 2.5.41前,包括IO-wait time. 
      wa: Time spent waiting for IO. 2.5.41前,包括in idle. 
      st: Time stolen from a virtual machine. 2.6.11前, unknown. 
   选项: -s: 显示内存的统计数据  

iostat:

  统计CPU和设备IO信息 
  示例:iostat 1 10
┌─[root@yyc]─[~]
└──╼ #which iostat
/usr/bin/iostat
┌─[root@yyc]─[~]
└──╼ #rpm -qf /usr/bin/iostat
sysstat-9.0.4-33.el6.x86_64

pmap命令:进程对应的内存映射 

  pmap [options] pid [...] 
   -x: 显示详细格式的信息 
   示例:pmap 1 
   另外一种实现: cat /proc/PID/maps 
┌─[root@centos7]─[~]
└──╼ #ps -C sshd o pid= | head -1 |xargs pmap -x
1070: /usr/sbin/sshd -D
Address Kbytes RSS Dirty Mode Mapping
000055c18eb2f000 800 292 0 r-x-- sshd
000055c18edf6000 16 16 16 r---- sshd
000055c18edfa000 4 4 4 rw--- sshd
000055c18edfb000 36 36 36 rw--- [ anon ]
000055c1905db000 132 60 60 rw--- [ anon ]
00007f1f98fc4000 48 20 0 r-x-- libnss_files-2.17.so
00007f1f98fd0000 2044 0 0 ----- libnss_files-2.17.so
00007f1f991cf000 4 4 4 r---- libnss_files-2.17.so
00007f1f991d0000 4 4 4 rw--- libnss_files-2.17.so

glances命令:EPEL源 

glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password]
 [--password] [t refresh] [-f file] [-o output] 
 内建命令:
 a Sort processes automatically
 l Show/hide logs 
 c Sort processes by CPU% 
 b Bytes or bits for network I/O 
 m Sort processes by MEM% 
 w Delete warning logs 
 p Sort processes by name 
 x Delete warning and critical logs 
 i Sort processes by I/O rate 
 1 Global CPU or per-CPU stats 
 d Show/hide disk I/O stats 
 h Show/hide this help screen 
 f Show/hide file system stats 
 t View network I/O as combination 
 n Show/hide network stats 
 u View cumulative network I/O 
 s Show/hide sensors stats 
 q Quit (Esc and Ctrl-C also work) 
 y Show/hide hddtemp stats 
常用选项: 
 -b: 以Byte为单位显示网卡数据速率 
 -d: 关闭磁盘I/O模块 
 -f /path/to/somefile: 设定输入文件位置 
 -o {HTML|CSV}:输出格式 
 -m: 禁用mount模块 
 -n: 禁用网络模块 
 -t #: 延迟时间间隔 
 -1:每个CPU的相关数据单独显示 
 C/S模式下运行glances命令 
   服务器模式: glances -s -B IPADDR IPADDR: 指明监听的本机哪个地址 
   客户端模式: glances -c IPADDR IPADDR:要连入的服务器端地址 

dstat命令:系统资源统计,代替vmstat,iostat 

 dstat [-afv] [options..] [delay [count]] 
  -c: 显示cpu相关信息 
  -C #,#,...,total 
  -d: 显示disk相关信息 
  -D total,sda,sdb,... 
  -g:显示page相关统计数据 
  -m: 显示memory相关统计数据 
  -n: 显示network相关统计数据 
  -p: 显示process相关统计数据 
  -r: 显示io请求相关的统计数据 
  -s: 显示swapped相关的统计数据 
 系统监控工具 
  --tcp 
  --udp 
  --unix 
  --raw 
  --socket 
  --ipc 
  --top-cpu:显示最占用CPU的进程 
  --top-io: 显示最占用io的进程 
  --top-mem: 显示最占用内存的进程 
  --top-latency: 显示延迟最大的进程 

iotop

  iotop命令是一个用来监视磁盘I/O使用状况的top类工具iotop具有与top相似的UI,其中包括PID、用户
I/O、进程等相关信息,可查看每个进程是如何使用IO 
  iotop输出 
     第一行:Read和Write速率总计 
     第二行:实际的Read和Write速率 
     第三行:参数如下: 
   线程ID(按p切换为进程ID) 优先级 用户 磁盘读速率 磁盘写速率 swap交换百分比 IO等待所占的百分比
线程/进程命令 
 iotop常用参数 
  -o, --only只显示正在产生I/O的进程或线程,除了传参,可以在运行过程中按o生效 
  -b, --batch非交互模式,一般用来记录日志 
  -n NUM, --iter=NUM设置监测的次数,默认无限。在非交互模式下很有用 
  -d SEC, --delay=SEC设置每次监测的间隔,默认1秒,接受非整形数据例如1.1 
  -p PID, --pid=PID指定监测的进程/线程 
  -u USER, --user=USER指定监测某个用户产生的I/O 
  -P, --processes仅显示进程,默认iotop显示所有线程 
  -a, --accumulated显示累积的I/O,而不是带宽 
  -k, --kilobytes使用kB单位,而不是对人友好的单位。在非交互模式下,脚本 编程有用 
 iotop常用参数和快捷键 
  -t, --time 加上时间戳,非交互非模式 
  -q, --quiet 禁止头几行,非交互模式,有三种指定方式 
  -q 只在第一次监测时显示列名 
  -qq 永远不显示列名 
  -qqq 永远不显示I/O汇交互按键 
 left和right方向键:改变排序 
  r:反向排序 
  o:切换至选项--only 
  p:切换至--processes选项 
  a:切换至--accumulated选项 
  q:退出 
  i:改变线程的优先级 

kill命令:

   向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头 (可省略)
不区分大小写 
  显示当前系统可用信号: kill –l,trap -l 
 常用信号:man 7 signal
  1) SIGHUP: 无须关闭进程而让其重读配置文件 
  2) SIGINT: 中止正在运行的进程;相当于Ctrl+c 
  3) SIGQUIT:相当于ctrl+\ 
  9) SIGKILL: 强制杀死正在运行的进程 
 15) SIGTERM:终止正在运行的进程 
 18) SIGCONT:继续运行 
 19) SIGSTOP:后台休眠 
 指定信号的方法: 
  (1) 信号的数字标识:1, 2, 9 
  (2) 信号完整名称:SIGHUP 
  (3) 信号的简写名称:HUP 
 进程管理工具 
  按PID:kill [-SIGNAL] pid …
  kill –n SIGNAL pid;
  kill –s SIGNAL pid 
 按名称:
  killall [-SIGNAL] comm… 
按模式:
  pkill [options] pattern 
  -SIGNAL 
  -u uid: effective user,生效者
  -U uid: real user,真正发起运行命令者 
  -t terminal: 与指定终端相关的进程 
  -l 显示进程名(pgrep可用) 
  -a 显示完整格式的进程名(pgrep可用)
  -P pid: 显示指定进程的子进程 

作业管理
 
 Linux的作业控制 
 前台作业:通过终端启动,且启动后一直占据终端;
 后台作业:可通过终端启动,但启动后即转入后台运行(释放终端) 
 让作业运行于后台 
 (1) 运行中的作业: Ctrl+z
 (2) 尚未启动的作业: COMMAND & 
  后台作业虽然被送往后台运行,但其依然与终端相关,退出终端,将关闭后台作业。如果希望送往后台后,剥离
与终端的关系 
  nohup COMMAND &>/dev/null  
  screen;COMMAND 
 查看当前终端所有作业:jobs 
 作业控制: 
  fg [[%]JOB_NUM]:把指定的后台作业调回前台
  bg [[%]JOB_NUM]:让送往后台的作业在后台继续运行 
  kill [%JOB_NUM]: 终止指定的作业
 并行运行 
 同时运行多个进程,提高效率 
  方法1 vi all.sh f1.sh& f2.sh& f3.sh&
  方法2 (f1.sh&);(f2.sh&);(f3.sh&) 
  方法3 { f1.sh& f2.sh& f3.sh& }





本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97533

联系我们

400-080-6560

在线咨询

工作时间:周一至周五,9:30-18:30,节假日同时也值班

QR code