Linux进程管理

Posted 浴盆

tags:

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

进程概念

进程是正在运行中的程序或者命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。只要程序在运行,都至少会产生一个进程。比如最简单的ls命令,会产生一个进程去执行,ls这个进程时间比较短,而有一些线程存活时间长,会常驻在内存中。打开一个网页,至少会在对方服务器上产生一个进程。
进程管理的主要作用如下:

  • 判断服务器健康状态
  • 查看系统中所有进程
  • 杀死进程

想必大家都用过windows下的任务管理器,可以对进程进行管理。也可以切到性能的tab,查看cpu使用率,查看单个进程占用的内存和cpu资源,从而进行相应的处理(内存不够加内存,cpu不够加机器搭建集群等)。

进程的查看

查看系统所有的进程的命令为ps aux或者ps -le,两者等效。(ps命令下的a/u/x/-l/-e的具体作用这里就不列举了)。
ps aux 之后有这几个字段,user表示产生进程的用户,pid表示进程id(系统通过进程id来识别进程,id为1是系统启动的进程,是所有进程的父进程)。%cpu和%MEM分别为进程占用cpu资源的百分比和占用物理内存的百分比,占用越高,越耗费系统资源。tty标识从哪里启动,?代表为系统启动。stat字段表示进程状态,常见的状态有R运行,S睡眠,S休眠状态。start字段表示进程启动时间,如果超过1000会显示月日。TIME为当前进程耗费的cpu计算资源。command代表进程名。
pstree查看进程树,pstree -p 显示进程的pid,-u显示进程所属的用户。
搜具体进程关键字的时候可以使用ps aux | grep xx

top命令

top命令用来观察系统健康状态,每3秒刷新一次(可以用-d来指定刷新频率)。top中包含ps命令中的进程列表,可以用shift -P等命令进行列表排序。

Processes: 413 total, 2 running, 411 sleeping, 2319 threads                                               19:41:22
Load Avg: 2.14, 2.38, 2.68  CPU usage: 9.97% user, 6.41% sys, 83.61% idle
SharedLibs: 278M resident, 48M data, 47M linkedit.
MemRegions: 94792 total, 3456M resident, 126M private, 1548M shared.
PhysMem: 10G used (2485M wired), 5800M unused.
VM: 3260G vsize, 1313M framework vsize, 68747914(0) swapins, 69849040(0) swapouts.
Networks: packets: 3125932/3893M in, 1892407/198M out. Disks: 8815515/340G read, 3535608/292G written.

PID    COMMAND      %CPU TIME     #TH   #WQ  #PORT MEM    PURG   CMPRS  PGRP  PPID  STATE    BOOSTS
26127  top          4.5  00:00.56 1/1   0    25    4920K+ 0B     0B     26127 5481  running  *0[1]
25968  TMSonic      1.0  00:03.55 8     1    211   9812K- 0B     0B     297   651   sleeping *0[66]

上图为本人mac下的截图,Load Avg与linux稍有区别。Load Avg代表在1分钟,5分钟,15分钟内的平均负载,在linux下如果是双核cpu,负载不应大于2。
CPU usage展示了系统被使用的百分比,user代表用户使用,sys代表系统模式占用的百分比,idle代表空闲的百分比(一般不能低于80%)。
内存中MemRegions的wired是系统核心占用的,永远不会从系统物理[内存]中驱除。 active表示这些[内存]数据正在使用中,或者刚被使用过。 free, 表示这些[内存]中的数据是无效的,这些空间可以随时被程序使用。
从硬盘中读数据会很慢,系统通过建立缓存cache在内存中加快数据读取。缓冲buffers是在写入数据的时候,先写入内存中,等到积累到一定量级,再写入硬盘中,减少对硬盘的写操作。
僵尸进程的出现是由于依赖进程被终止,自己不能正确释放。
可以使用top > top.log将log保存到文件中。

杀进程

当修改配置文件,需要重启服务器的时候,可以使用kill -1 进程id的方式重启进程。-1信号让进程立即关闭,重新读取配置文件后重启。kill -9 进程id 用来强制终止进程。
killall可以通过进程名批量杀死进程(killall -t 使用终端号杀进程)。在杀登录进程的时候,为避免把自己杀掉,可以使用w来查看所有用户。

10:37  up 8 days, 14:54, 3 users, load averages: 1.91 1.99 2.34
USER     TTY      FROM              LOGIN@  IDLE WHAT
yupen    console  -                04 219  8days -
yupen    s000     -                05 219      - w
yupen    s003     -                04 219  5days -zsh

WHAT表示当前正使用哪个命令。

修改进程优先级

linux是多用户、多任务的操作系统,cpu在同一个时钟周期内只能运算一个指令,进程优先级决定了每个进程处理的优先顺序。(针对单核cpu)
使用ps -le命令来查看

 UID   PID  PPID        F CPU PRI NI       SZ    RSS WCHAN     S             ADDR TTY           TIME CMD
    0     1     0     4004   0  37  0  4373868  10420 -      Ss                  0 ??         8:14.10 /sbin/
    0    48     1     4004   0   4  0  4351396    828 -      Ss                  0 ??         0:27.11 /usr/s
    0    49     1     4004   0  31  0  4378812   4060 -      Ss                  0 ??         0:17.96 /usr/l
    0    52     1     4004   0  20  0  4317244    460 -      Ss                  0 ??         0:04.72 /Syste
    0    53     1     4004   0  31  0  4386588   1676 -      Ss                  0 ??         0:18.08 /usr/l
    0    54     1  1004004   0  50  0  4728464   4652 -      Ss                  0 ??         2:28.69 /Syste
    0    56     1     4004   0   4  0  4382636   1156 -      Ss                  0 ??         0:06.34 /Syste

PRI代表Priority,NI代表Nice,这两个值都是优先级,两个数字和越小代表优先级越高。用户不能直接修改Priority,只能修改NI,NI的值的范围是-20到19,只有root用户(超级用户)可以改为负值。可以通过nice命令修改。

以上是关于Linux进程管理的主要内容,如果未能解决你的问题,请参考以下文章

浅谈对linux性能监控命令top的理解

Linux系统编程-进程创建(fork)外部程序调用(exec)

进程和线程

结合中断上下文切换和进程上下文切换分析Linux内核的一般执行过程

linux下脚本实现从一个文件中读数,有文件多行 (每行都是:名称 + 多个空格 + 数据 ),

第四次实训