Linux 进程管理

目标内容
进程管理
进程管理工具
后台和前台进程
进程的优先级


1. Linux进程管理

程序、进程、线程概念

程序:一组指令的集合  例如:QQ
进程:程序的执行就是进程。也可以把进程看成一个独立的程序,在内存中有其对应的代码空间和数据空间,一个进程所拥有的数据和代码只属于自己(make –j 4)。进程是资源分配的基本单位,也是调度运行的基本单位。
线程:线程被人们认为是轻量级的进程,它是进程中单独运行的程序。
换句话说,就是一个进程可以包含多个线程,并且至少有一个主线程,同时同一进程的线程共享该进程的代码和数据

程序和进程的区别
1、 程序是静态的,它只是一组指令的集合,不具有任何的运行意义。本身作为一次软件资源长期保存;而进程是程序执行的动态过程.它是动态概念,有一定的生命周期,它是动态产生和消亡的
2、 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程;一个程序可以由多个进程公用
3、进程还具有并发性和交往性,而程序却是封闭的。

进程和线程的区别
1、一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
2、线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口。它必须组成进程才能被执行。


进程的属性
进程ID(PID):是唯一的数值,用来区分进程
父进程的ID(PPID)
启动进程的用户ID(UID)和所归属的组(GID)
进程状态:状态分为运行R、休眠S、僵尸Z
进程执行的优先级
进程所连接的终端名
进程资源占用:比如占用资源大小(内存、CPU占用量)

2.进程管理工具
对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill、工具

进程查看命令:ps
常用参数(选项)
 -a 显示所有用户的进程
 -u 显示用户名和启动时间
 -x 显示没有控制终端的进程
 -e 显示所有进程,包括没有控制终端的进程
 -l 长格式显示,详细信息显示
 -w      宽行显示,可以使用多个w进行加宽显示

[root@xuegod66 ~]# ps -aux|more
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

结果参数的解释:
UID 用户的id
USER 用户名
PID 程进
PPID 父进程的进程号
VSZ 进程的虚拟大小
RSS 驻留集的大小,也可以理解为内存中页的数量
TTY 进程启动的终端
STAT 进程当前状态(S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止)
NI 进程优先级
TIME 进程自从启动以后启用CPU的总时间
%CPU 占用CPU时间和总时间的百分比
%MEM 占用内存与系统内存总量的百分比
COMMAND/CMD 进程的命令名


其中状态参数说明:

< 高优先级
N 低优先级
L 有些页被锁进内存
S 包含子进程
+ 位于后台的进程组
l 多线程

查看所有用户执行的进程的详细信息
[root@xuegod72 ~]# ps -aux
[root@xuegod72 ~]# ps -le

查看指定进程信息
[root@xuegod66 ~]# ps -aux|grep ssh
[root@xuegod66 ~]# ps -el|grep ssh

 ps -aux 是用BSD的风格来显示进程。
 ps -ef 是用标准的格式显示进程。

top动态查看进程
[root@xuegod66 ~]# top
top - 23:58:00 up 7 min,  2 users,  load average: 0.00, 0.02, 0.00
Tasks: 120 total,   1 running, 119 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   625376k used,   379036k free,    11872k buffers
Swap:  4194296k total,        0k used,  4194296k free,    74712k cached

---以上5行 为系统的整体信息
---以下为 进程信息
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                      
     1 root      20   0 19356 1532 1232 S  0.0  0.2   0:00.83 init         

系统的信息解释
任务队列信息(第一行)
其内容如下:
23:58:00 当前时间
up 7 min 系统运行时间,格式为时:分
2 users, 当前登录用户数
load average: 0.00, 0.02, 0.00 系统负载,即任务队列的平均长度。 三个数值分别为  1分钟、5分钟、15分钟前到现在的平均值。

进程和CPU的信息( 第二、三行)
当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 481 total 进程总数
1 running 正在运行的进程数
480 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s):
0.0% us 系统用户进程使用CPU百分比。
0.0% sy 内核中的进程占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
100% id 空闲CPU百分比

内存信息(第四五行)
Mem: 2033552k total 物理内存总量

340392k used 使用的物理内存总量
1376636k free 空闲内存总量
316524k buff/cache 用作内核缓存的内存量。
和free –k 一个意思

Swap: 2017948k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
1518148 avail Mem 总的可利用内存是多少

进程信息
PID 进程id
USER 进程所有者的用户名
NI 进程优先级。 nice值。负值表示高优先级,正值表示低优先级
RES 实际使用内存大小。
S 进程状态。
            D=不可中断的睡眠状态
            R=运行
            S=睡眠
            T=跟踪/停止
            Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 进程使用的物理内存百分比
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 命令名/命令行

top快捷键:
 默认3s刷新一次
 空格 :立即刷新。
 q退出
 M:按内存排序
 P:按CPU排序
 h:任务优先级

pgrep管理工具
作用:查找服务进程号
语法格式 pgrep  [服务名称]
比如我们查看一下apahce服务的进程号
[root@xuegod66 ~]# pgrep httpd
[root@xuegod66 ~]# pgrep ssh

pstree工具使用
pstree命令以树状图显示进程间的关系(display a tree of processes)。
格式:pstree
以树状图显示进程,只显示进程的名字,且相同进程合并显示。
格式:pstree  -p
以树状图显示进程,还显示进程PID。
[root@xuegod72 ~]# pstree |more
[root@xuegod72 ~]# pstree -p |more

使用netstat工具
netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态
命令参数:
 -a或–all 显示所有连接中的接口
 -c或–continuous 持续列出网络状态
 -C或–cache 显示路由器配置的快取信息
 -e或–extend 显示网络其他相关信息
 -F或–fib 显示FIB
 -g或–groups 显示多重广播功能群组组员名单
 -h或–help 在线帮助
 -i或–interfaces 显示网络界面信息表单
 -l或–listening 显示监控中的服务器的接口
 -M或–masquerade 显示伪装的网络连线
 -n或–numeric 直接使用IP地址,而不通过域名服务器
 -N或–netlink或–symbolic 显示网络硬件外围设备的符号连接名称
 -o或–timers 显示计时器
 -p或–programs 显示正在使用接口的程序识别码和程序名称
 -r或–route 显示Routing Table
 -s或–statistice 显示网络工作信息统计表
 -t或–tcp 显示TCP传输协议的连接状况
 -u或–udp 显示UDP传输协议的连接状况
 -v或–verbose 显示指令执行过程
 -V或–version 显示版本信息
 -w或–raw 显示RAW传输协议的连线状况
 -x或–unix 此参数的效果和指定”-A unix”参数相同
 –ip或–inet 此参数的效果和指定”-A inet”参数相同

 查看所有的TCP端口
[root@xuegod72 ~]# netstat –anlpt
[root@xuegod72 ~]# netstat -antpu|grep 80

 查看某个服务的端口
[root@xuegod72 ~]# netstat -anlpt | grep sshd

 查看所有的UDP端口
[root@xuegod72 ~]# netstat -anlpu

Linux后台进程与前台进程
Linux后台进程与前台进程的区别
Linux后台进程:
也叫守护进程(Daemon),是运行在后台的一种特殊进程。
守护的意思就是不受终端控制;Linux的大多数服务器就是用守护进程实现的。
比如,Web服务器httpd等。
Linux前台进程:
用户使用的有控制终端的进程.


进程的前台与后台运行
跟系统任务相关的几个命令:fg、bg、jobs、&、ctrl+z
& 用在一个命令的最后,可以把这个命令放到后台执行.
ctrl + z 将一个正在前台执行的命令放到后台,并且暂停.
jobs 查看当前有多少在后台运行的进程.
fg 将后台中的命令调至前台继续运行, 如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid) 
bg 将一个在后台暂停的命令,变成继续执行; 如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
实战恢复被挂起的进程


实战恢复被挂起的进程
例: vim a.txt   按下: ctrl+z 
[root@xuegod66 ~]# vim a.txt

[1]+  Stopped                 vim a.txt
[root@xuegod66 ~]# ps -aux|grep vim

那么怎么恢复呢?用bg还是fg
[root@xuegod66 ~]# jobs
[1]+  Stopped                 vim a.txt
[root@xuegod66 ~]#
fg是将后台挂起的进程恢复到前台运行
[root@xuegod66 ~]# bg
[1]+ vim a.txt &
[root@xuegod66 ~]# fg
[root@xuegod66 ~]# jobs


kill进程
控制(关闭)进程
kill用法
关闭进程:kill  [进程号]
通过信号的方式来控制进程
[root@xuegod72 ~]# kill -l

 关闭进程
两种形式都可以强行关闭进程。
kill -s 9 [进程号]  (强行关闭)
[root@xuegod66 ~]# ps -ef|grep vim
root       1716   1642  0 00:17 pts/0    00:00:00 grep vim
[root@xuegod66 ~]# kill -9 1716


kill和killall终止进程
查看 进程的pid
使用kill命令
语法:kill -9 pid
killall 通过程序的名称,直接杀死所有进程
[root@xuegod66 ~]# ps -ef|grep httpd
[root@xuegod66 ~]# killall httpd
[root@xuegod66 ~]# ps -ef|grep httpd

进程的优先级管理
进程的优先级的定义
比如:XXX吃饭
优先级取值范围为(-20,19),越小优先级越高, 默认优先级是0
命令1:nice
作用:指定程序的运行优先级
格式:nice -n command
命令2:renice
作用:改变程序的运行优先级
格式:renice -n pid
实战:
 指定一个文件的优先级
[root@xuegod72 ~]# nice -n 5 vim a.txt
输入内容,然后ctrl+z 挂起

 通过ps查看这个文件的PID号
[root@xuegod72 ~]# ps -aux|grep vim

 通过top命令查看优先级
[root@xuegod72 ~]# top -p 26154

 改变正在运行的进程的优先级
[root@xuegod72 ~]# renice -10 26154

猜你喜欢

转载自takeme.iteye.com/blog/2363216