#yyds干货盘点#Linux进程

Posted 学思共进

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点#Linux进程相关的知识,希望对你有一定的参考价值。

一、进程


  • #yyds干货盘点#Linux进程_数据


  • 1.进程概述:


    • 什么是进程(Process

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


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

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


    • 如何产生进程?

  • 执行一个程序或命令就可以启动一个进程。

  • 进程启动时,操作系统为其分配相对应的系统内唯一的进程IDPID)。


    • Linux启动的第一个进程  

  • [root@localhost ~]# pidof init

  • 1  


    • 进程演示

  • [root@localhost ~]# ps  a

  • vim install.log

  • 图像界面新开一个Terminal#vim install.log

  • 程序被加载为进程示意图:

  • #yyds干货盘点#Linux进程_数据_02

  • [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身份启动后交给普通用户apacheapache用户无登录权限,防止他人恶意入侵后使用用户做一些操作。)


  • 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是可以编辑内容的,vimvi编译器的升级版,可以理解为是一个强大的三方插件。)

  • top 执行过程当中可以使用的按键指令:


    • ? :显示在 top 当中可以输入的按键指令
    • P :CPU的使用资源排序显示
    • M :Memory的使用资源排序显示
    • N :PID来排序
    • T :由该Process使用的CPU时间累积 (TIME+) 排序
    • k :给予某个PIDkill该进程(内核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


    • 第一行显示的信息:目前的时间,开机到目前为止所经过的时间 up 13min ,已经登入系统的用户人数 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 :每个processID; 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 的所属账号名称。


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


  • 3.进程管理

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


    • –选项与参数:
    • -l :这个是 L 的小写,列出目前 kill 能够使用的信号 (signal) 有哪些? signal :向进程发送的信号,指示对它进行不同操作。用 man 7 signal 可知:
    • -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 |grep sshd

  • 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:查阅系统与核心相关信息

  • 以上是关于#yyds干货盘点#Linux进程的主要内容,如果未能解决你的问题,请参考以下文章

    #yyds干货盘点#linux批量杀进程

    #yyds干货盘点#进程相关管理工具

    supervisor管理集群(多个tomcat)#yyds干货盘点#

    liunx定时任务crontab命令#yyds干货盘点#

    #yyds干货盘点#启动流程和grub故障排错

    系统服务#yyds干货盘点#