#yyds干货盘点#Linux进程

书到用时方恨少,事非经过不知难。这篇文章主要讲述#yyds干货盘点#Linux进程相关的知识,希望能为你提供帮助。
一、进程




  • 1.进程概述:

    • 什么是进程(Process) ?

  • 是程序的具体实现,执行程序的具体过程。

    • Linux操作系统与进程对比window系统进程,ctrl+alt+delete(看到的进程类似)  

  • 操作系统的一个重要功能就是为进程提供方便,比如启动进程、为进程分配内存空间、管理进程的相关信息等等。

    • 如何产生进程?

  • 执行一个程序或命令就可以启动一个进程。
  • 进程启动时,操作系统为其分配相对应的系统内唯一的进程ID(PID)。

    • Linux启动的第一个进程  

  • [root@localhost ~]# pidof init
  • 1  

    • 进程演示

  • [root@localhost ~]# ps  a
  • 【#yyds干货盘点#Linux进程】vim install.log
  • 图像界面新开一个Terminal#vim install.log
  • 程序被加载为进程示意图:

  • [root@localhost ~]# ps -aux | grep bash     管道符
  • root          2491  0.0  0.1 108304  1920 pts/0      Ss    05:18    0:00 /bin/bash
  • root          2515  0.0  0.1 108304  1916 pts/1      Ss    05:20    0:00 -bash
  • root        25541  0.0  0.1 108340  1776 pts/2      Ss+  07:08    0:00 /bin/bash
  • root        25871  0.0  0.0 103252    828 pts/1      S+    08:04    0:00 grep bash
  • [root@localhost ~]# su tom
  • [tom@localhost ~]$ ps aux | grep bash
  • root          2491  0.0  0.1 108304  1920 pts/0      Ss    05:18    0:00 /bin/bash
  • root          2515  0.0  0.1 108304  1916 pts/1      Ss    05:20    0:00 -bash
  • root        25541  0.0  0.1 108340  1776 pts/2      Ss+  07:08    0:00 /bin/bash
  • tom          25874  0.0  0.1 108340  1772 pts/1      S      08:04    0:00 -bash
  • tom          25895  0.0  0.0 103252    828 pts/1      S+    08:04    0:00 grep bash
  • [root@localhost ~]# service httpd start     #使用root身份启动httpd服务
  • [root@localhost ~]# ps aux|grep httpd     #查看httpd进程
  • root          2785  0.0  0.7 184288  3852 ?              Ss    07:39    0:00 /usr/sbin/httpd
  • apache      2788?              S      07:39    0:00 /usr/sbin/httpd
  • #以apache用户进行管理,达到安全机制,root身份启动后交给普通用户apache(apache用户无登录权限,防止他人恶意入侵后使用用户做一些操作。)

  • 2.如何查看进程
  • 进程查看命令

    • ps(process status) :将某个时间点的程序运作情况截取下来
    • 选项和参数
    • a :(all)(和输入终端(terminal) 关联的所有 process,通常与x一起使用,列出完整信息。
    • x :后台进程
    • u :有效使用者 (effective user) 相关的 process 
    • 常用组合
    • ps -aux 观察系统所有的程序数据 (常用)

  • 常用组合

    • ps -aux 观察系统所有的程序数据 (常用)!!!
    • ps axjf 可以用类似于树状的形式显示
    • 参数不用背,可以通过man ps或使用Linux的命令大全查看(推荐)

  • 仅查看自己的bash相关的进程的详细信息
  • [root@test ~]# ps -l
  • F S    UID    PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY                  TIME CMD
  • 4 S        0  2305  2301  0  80    0 - 27084 wait    pts/0      00:00:00 bash
  • 4 R        0  2357  2305  0  80    0 - 27035 -          pts/0      00:00:00 ps
  • 观察系统所有程序: ps aux(非常常用)
  • [root@test ~]# ps aux | head -4
  • USER  PID %CPU %MEM  VSZ    RSS TTY  STAT START    TIME COMMAND
  • root          1  0.1            0.1  19360  1540      ?              Ss    05:07    0:01 /sbin/init
  • root          2  0.0            0.0          0        0                    ?              S      05:07    0:00 [kthreadd]
  • root          3  0.0            0.0          0        0                    ?              S      05:07    0:00 [migration/0]
  • 以下为各选项的含义
  • USER:该 process 属于那个使用者
  • PID :该 process 的程序标识符(进程ID)
  • %CPU:该 process 使用掉的 CPU 资源百分比;
  • %MEM:该 process 所占用的物理内存百分比;
  • VSZ :该 process 使用掉的虚拟内存量 (Kbytes)
  • RSS :该 process 占用的物理的内存量 (Kbytes)
  • TTY :该 process 是在哪个终端机上面运作,若与终端机无关则显示 ?, 另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 (pts表示虚拟终端,例如pts/1  pts/2 等)
  • STAT:该进程目前的状态,状态显示与ps -l 的 S 旗标相同 (R/S/D/T/Z)
  • START:该 process 被触发启动的时间;
  • TIME :该 process 实际使用 CPU 运作的时间。
  • COMMAND:该程序的实际命令是什么或理解为该进程是哪一个程序/命令启动的
  • LINUX进程状态:
  • ?    ?D 不可中断 Uninterruptible(usually IO)
  •   R 正在运行,或在队列中的进程
  •   S 处于休眠状态
  •   T 停止或被追踪
  •   Z 僵尸进程
  •   W 进入内存交换(从内核2.6开始无效)
  •   X   死掉的进程
  • ?  ?l 多进程 
  • < 高优先级
  •     N   低优先级
  •     s   包含子进程
  •     +   位于后台的进程组
  • 僵尸进程(状态:Z )

    • 通常造成僵尸进程的原因是该进程应该已经执行完毕,或者是因故障应该要终止, 但该进程的父进程却无法完整、有效的将进程结束掉,而造成进程一直存在内存当中 。
    • 如果发现在某个进程的CMD后面还接上< defunct> 时,就代表该进程是僵尸进程。
    • 例如:apache 8683 0.0 0.9 83384 9992? Z 14:33 0:00 /usr/sbin/httpd < defunct>

  • top:动态观察进程的变化

    • ps是截取一个时间点的进程状态,而top则可以持续观察进程运行的状态
    • 选项与参数:

  • -d :后面可以接秒数,就是整个程序画面更新的秒数。默认3秒;  
  • -b :以批次的方式执行 top ,还有更多的参数可以使用,通常会搭配数据流 重导向来将批次的结果输出成为档案;
  • -n:(Number)与 -b 搭配,意义是需要进行几次 top 的输出结果;
  • -p :指定某些个 PID 来进行观察监测而已;
  • #top –d 2
  • #top –b –n  2
  • #top –b –n 5 > > a.log
  • #cat a.log  (cat仅用于查看,不具备编辑功能,vim是可以编辑内容的,vim是vi编译器的升级版,可以理解为是一个强大的三方插件。)
  • 在 top 执行过程当中可以使用的按键指令:

    • ? :显示在 top 当中可以输入的按键指令
    • P :以CPU的使用资源排序显示
    • M :以Memory的使用资源排序显示
    • N :以PID来排序
    • T :由该Process使用的CPU时间累积 (TIME+) 排序
    • k :给予某个PID后kill该进程(内核2.6后失效)
    • q :离开top软件的按键 。

  • #top –d 1
  • 按以上选项测试
  • [root@test ~]#top -d 2 #每两秒钟更新一次 top
  • top - 05:06:55 up 13 min,  1 user,  load average: 0.00, 0.06, 0.10
  • Tasks: 125 total,    1 running, 124 sleeping,    0 stopped,    0 zombie
  • Cpu(s):  0.2%us,  0.0%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st
  • Mem:    1012352k total,    299596k used,    712756k free,      19276k buffers
  • Swap:  2031608k total,              0k used,  2031608k free,    108536k cached

    • 第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up13min ,已经登入系统的用户人数 1 user,系统在 1, 5,15 分钟的平均工作负载
    • 第二行 显示的是目前进程的总量与个别进程在什么状态(running,sleeping, stopped, zombie)
    • 第三行显示CPU的整体负载      
    • 第四行和第五行表示目前的物理内存与虚拟内存使用情况

  •   PID USER    PR  NI  VIRT  RES  SHR    S %CPU %MEM      TIME+  COMMAND                     
  •   2301 root    20    0 15036 1244  956  R  0.5              0.1    0:00.50 top                             
  •       1 root          20    0 19356 1540 1228 S  0.0              0.2    0:01.71 init                           
  •       2 root          20    0        0      0                0          S  0.0              0.0    0:00.01 kthreadd                   
  •       3 root          RT    0        0      0                0          S  0.0              0.0    0:00.04 migration/0             
  •       4 root          20    0        0      0                0        S    0.0              0.0    0:00.01 ksoftirqd/0             
  •       5 root          RT    0        0      0                0        S    0.0              0.0    0:00.00 migration/0             
  •       6 root          RT    0        0      0                0        S    0.0              0.0    0:00.00 watchdog/0               
  •       7 root          RT    0        0      0                0        S    0.0              0.0    0:00.11 migration/1

    • 每个 process使用的资源情况:
    • PID :每个process的ID; USER: 该process所属的使用者; PR:Priority 的简写,程序的优先执行顺序,越小越早被执行;
    • NI :Nice 的简写,与 Priority(优先级) 有关,也是越小越早被执行;
    • %CPU:CPU 的使用率%MEM:内存的使用率;
    • TIME+:CPU 使用时间的累加;   COMMAND 进程名称
    • top默认使用CPU使用率(%CPU)作为排序的重点,如果想 要使用内存使用率排序,则可以按下M, 若要恢复则按下P 即可。
    • 将top信息进行3次并输出到文件中

  • ?  ?[root@test ~]# top -b -n  3 > /tmp/top.txt 。
  • 查看top.txt文件
  • [root@test tmp]# cat top.txt
  • pstree查看进程树?                ?

    • 选项与参数:

  • -A :各程序树之间的连接以 ASCII 字符来连接;
  • -U :各程序树之间的连接以万国码的字符来连接。在某些终端接口下 可能会有乱码; UTF-8
  • -p :并同时列出每个 process 的 PID;
  • -u :并同时列出每个 process 的所属账号名称。

    • 系统进程树同时显示PID与user(如果用root用户执行的,就不会显示,换句话说,用当前账户执行的程序,在pstree中将不显示当前账户的名称)。
    • [root@test ~]# pstree –Aup  #(演示)


  • 3.进程管理
  • kill发送信号(并不只是杀死进程)

    • –选项与参数:
    • -l :这个是 L 的小写,列出目前 kill 能够使用的信号 (signal) 有哪些? signal :向进程发送的信号,指示对它进行不同操作。用 man 7signal 可知:
    • -15:以正常的程序方式终止一个进程!!!
    • -9 :立刻强制终止一个进程!!!(!!不能强制结束系统级别的进程)
    • -2 :代表由键盘输入 [ctrl]-c 同样的动作;
    • -1 :对于sshd这样的守护进程,重新读取一次参数的配置文件 (类似 reload),如果进程为非守护进程,默认为终止进程!!
    • [root@test ~]# kill –l    #所有可用的信号

  • 1) SIGHUP    2) SIGINT  3) SIGQUIT    4) SIGILL    5) SIGTRAP 6) SIGABRT          7) SIGBUS            8) SIGFPE            9) SIGKILL        10) SIGUSR1  11) SIGSEGV        12) SIGUSR2        13) SIGPIPE        14) SIGALRM        15) SIGTERM

    • 具体含义可以通过man来查看
    • [root@test ~]# man kill

  • SEE ALSO  bash(1), tcsh(1), kill(2), sigvec(2), signal(7)
  • [root@test ~]# man 7 signal
  • Signal        Value        Action    Comment
  •   ------------------------------------------------------------
  • SIGHUP              1          Term      Hangup detected on controlling terminal or death of controlling process
  • SIGINT              2            Term      Interrupt from keyboard
  • SIGKILL            9            Term      Kill signal
  • SIGTERM      15        Term      Termination signal

    • 查看其中某个进程[root@test ~]# ps aux |grepsshd

  • root          1859  0.0  0.1  66604  1180 ?              Ss    04:55    0:00 /usr/sbin/sshd
  • root          2345  0.0  0.3 100348  4040 ?              Ss    05:21    0:00 sshd: root@pts/0
  • root          2927  0.0  0.0 103256    832 pts/0      S+    07:10    0:00 grep sshd

    • 重新加载并启动[root@test ~]# kill -1 1859

  • [ root@test ~]# ps aux |grep sshd
  • root          2345  0.0  0.3 100348  4040 ?              Ss    05:21    0:00 sshd: root@pts/0
  • root          2928  0.0  0.1  66604  1144 ?              Ss    07:14    0:00 /usr/sbin/sshd
  • root          2930  0.0  0.0 103252    824 pts/0      S+    07:15    0:00 grep sshd

    • 再次查看发现重启后的进程的pid发生了改变。
    • killall -signal 命令名:终止以某命令名称启动的全部进程
    • 向syslogd这个命令启动的进程发送一个SIGHUP信号

  • [root@test ~]# killall -9 syslogd

    • 强制终止所有以httpd启动的进程

  • [root@test ~]# killall -9 httpd
  • 演示可以使用hadoop(以java启动的进程)
  • [root@test ~]# jps  #查看hadoop的进程
  • [root@test ~]#ps aux|grep java
  • [root@test ~]#ps ax|grep datanode 对应的PID
  • [root@test ~]#killall -15 java
  • [root@test ~]# jps #发现对应的进程已经全部关闭

  • 4.系统资源监控

    • free :观察内存(memory)使用情况
    • uname:查阅系统与核心相关信息
    • uptime:观察系统启动时间与工作负载
    • netstat :网络监控
    • vmstat :侦测系统资源变化, CPU/内存/磁盘输入输出状态

  • free :观察内存使用情况

    • [root@test ~]# free [-b|-k|-m|-g] [-t]
    • 选项与参数:
    • 直接输入 free 时,显示的单位是 Kbytes,我们可以使用 b(bytes), m(Mbytes),k(Kbytes), 及 g(Gbytes) 来定义显示单位
    • -t :在输出的最终结果时,显示物理内存与 swap 的总量。
    • 显示目前系统的内存容量

  • [root@test ~]# free
  • ?                          ?total?            ?used            free        shared      buffers        cached
  • Mem: 1012352        318528        693824                  0          23592        113208
  • -/+ buffers/cache: 181728      830624
  • Swap:  2031608                  0                2031608
  • free命令显示选项解析 

    • Mem一行显示的是物理内存的量
    • Swap,虚拟内存的量
    • total是总量,used是已被使用的量,free则是剩余可用的量
    • shared,共享内存       
    • buffers,将要/(未来)写磁盘的内容
    • cached,已写磁盘或者已从磁盘读出的内容。

  • uname:查阅系统与核心相关信息
    • 推荐阅读