进程管理 进程管理工具 后台和前台进程 进程的优先级
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