linux中的进程管理
linux进程概述
进程是操作系统结构的基础;是一个正在执行的程序;是计算机中正在运行的程序实例;可以分配给处理器
并由处理器执行的一个实体;由单一顺序的执行显示,一个当前状态和一组相关的系统资源所描述的活动单元。
换个角度说,进程是抽象概念,就像程序是实体概念一样。程序是储存在磁盘上包含可执行机器指令和数据的
静态实体,我们可以看到的是一个一个.exe文件(windows下)或者可执行的任何名称的文件(unix等操作系统下)
而进程是在操作系统中执行的特定任务的动态实体。Linux系统中每个运行中的程序至少由一个进程组成,每个进程
与其他进程都是彼此独立的,都有自己独立的权限与职责。一个用户的应用程序不会干扰到其他用户的程序或者操作
系统本身。
Linux操作系统包含如下3种不同类型的进程,每种进程都有其自己的特点和属性。
1.交互进程:有一个Shell启动的进程。交互进程既可以在前台运行,也可以再后台运行。
2.批处理进程:这种进程和终端没有联系,是一个进程序列。
3.守护进程:Linux系统启动时启动的进程,并在后台运行。
linux进程状态
通常在操作系统中,进程至少要有3种基本状态,分别为运行态,就绪态和封锁态(阻塞态)。
运行状态是指当前进程已分配到cpu,它的程序正在处理器上执行时的状态。处于这种状态的进
程个数不能大于CPU的数目。在一般单CPU机制中,任何时刻处于运动状态的进程至多有一个。
就绪状态是指进程已具备运行条件,但因为其他进程正占用CUP,所以暂时不能运行而等待分配
CPU的状态。一旦把CPU分给它,立即就可运行,在操作系统中,处于就绪状态的进程数目可以是多个。
封锁状态是指进程因等待某种事件发生(如等待某一输入/输出操作完成,等待其他进程发来的信号
等)而暂时不能运行的状态。也就是说,处于封锁状态的进程尚不具备运行条件,即使CUP空闲,它也
无法使用。这种状态有时也称为不可运动状态或挂起状态,系统中处于这种状态的进程也可以是多个。
手工启动
由用户输入命令,直接启动一个进程便是手工启动进程,但手工启动进程又可以分为很多种,根据
启动的进程类型不同、性质不同,实际结果也不同。
台前启动
用户输入一个命令“ls -l,这就已经启动了一个进程,而且是一个前台的进程。这时候系统其实已经
处于一个多进程状态。通常情况下,用户在启动进程时,系统中已经存在了许多运行在后台的、系统启动
时就已经自动启动的进程。
后台启动
直接从后台手工启动一个进程用的比较少,除非该进程甚为耗时,且用户也不急于看到处理结果。假设
用户要启动一个要长时间运行的格式化文本文件的进程,为了不使整个Shell在格式化过程中都处于”瘫痪“状
态(长时间看不到任何运行结果),选择从后台启动进程是明智的选择。
上述两种启动方式有个共同的特点,就是新进程都是由当前Shell这个进程产生的。也就是说,是Shell创
建了新进程,于是就称这种关系为进程间的父子关系。这里Shell是父进程,而新进程是子进程。一个父进程可
以有多个子线程,一般地,子进程结束后才能继续父进程:如果从后台启动,那就不用等待子进程结束了
一种比较特殊的情况是在使用管道符的时候:
这个时候同时启动了2个进程,它们都是Shell的子线程,互为兄弟进程。
进程中的系列命令
ps命令是Linux中查看进程状态的最常用命令,能显示系统中运行的进程,进程号,命令,cpu使用量、内
存使用量等。
ps [选项]
-a 显示系统中与tty相关的(除会话组长之外)所有的进程的信息。
-e 显示所有进程的信息。
-f 显示进程的所有信息
-l 以长格式显示进程信息
r 只显示正在运行的进程
u 显示面向用户的格式(包括用户名、cpu及内存使用情况等信息)
x 显示所有非控制终端上的进程信息
--pid 显示由进程 ID指定的进程信息
--tty 显示指定终端上的进程信息。
pstree命令
linux中每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状图来展示
进程间关系。还可指定树的根线程
top命令
top命令和ps命令的基本作用是相同的,即显示系统当前的进程及其状态,但top是一个动态显示过程,可
以通过用户按键来不断刷新当前状态。如果在前台执行代码,该命令将独占前台,直到用户终止该程序为止。top
命令的一般格式 top [bciqsS][d<间隔秒数>][n<执行次数>]
b 使用批处理模式
c 列出程序时,显示每个程序的完整指令,包含指令名称、路径和参数等相关信息
i 执行top指令时,忽然闲置或已成为Zombie的程序
q 持续监控程序执行的状况
s 使用保密模式,消除互动模式下的潜在危机
S 使用累计模式
d<间隔秒数>:设置top监控程序执行状况的间隔时间,以秒为单位。
n<执行次数>:设置监控信息的更新次数。
使用top命令,每30秒实时更新一次系统中运行进程的状态
nice命令
在linux中通过nice命令的帮助,用户可以设置和改变进程的优先级。提高一个进程的优先级,内核会分配更
多cpu时间片给这个进程。默认情况下,进程以0的优先级启动。进程优先级可以通过top命令显示的NI(nice value)
列查看
进程优先级值的范围从-20到19.值越低,优先级越高。若调整后的程序运行优先级高于-20,则就以优先级-20来运
行命令行;若调整后的程序运行优先级低于19,则就以优先级19来运行命令行。若 nice命令未指定优先级的调整值,则
以缺省值10来调整程序运行优先级,既在当前程序运行优先级基础之上增加10。
语法:
nice [-n <优先级>] [--help] [--version] [执行指令]
选项介绍:
-n <优先级> 指定优先级;
--
help 帮助信息;
--
version 版本信息;
rennice命令
renice命令类似nice命令,使用该命令可以改变正在运行的进程优先值。但请注意,该用户只能改变属于他
自己的进程优先值。
语法
renice priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
参数说明:
-
-p pid 重新指定行程的 id 为 pid 的行程的优先序
-
-g pgrp 重新指定行程群组(process group)的 id 为 pgrp 的行程 (一个或多个) 的优先序
-
-u user 重新指定行程拥有者为 user 的行程的优先序
用户为root的所有进程优先值变为-3
kill命令
通常终止一个前台进程可以使用Ctrl+C组合键,但是对于一个后台进程就需要用kill命令来终止。kill命令
通过向进程发送指定的信号来结束相应的进程。在默认的情况下,采用编程号为15的TERM信号将终止所有不能
捕获该信号的进程。对于那些可以捕获该信号的进程,就要用编号为9的kILL信号强行杀掉该进程。
kill 命令的一般格式如下:
kill [-s 信号 |-p ] 进程号
kill -l [信号]
-s 指定要发送的信号,既可以是信号名(如 kill),也可以是对应信号的号码(如9)
-p 指定kill命令只是显示进程的PID(进程标识号),并不真正发出结束信号
-l 显示信号名列表
ulimit命令
ulimit用于启动进程所占用的资源.对于系统管理员是最有用的,可以管理重度使用和存在性能问题
的系统。限制资源大小可以确保重要进程持续运行,其他进程不会占用过多资源。
语法格式:
ulimit [-acdfHlmnpsStvw] [size]
参数介绍:
-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-v size:设置虚拟内存的最大值.单位:kbytes
w 命令
w命令提供当前登录的用户及其正在执行的进程的信息。显示信息头包含信息,如当前时间、系统运行时长
登录用户总数、过去的1,5,15分钟内的负载均衡数。
语法格式如下:
w -[husfV] [user]
下面对参数进行说明:
-h 不显示标题。
-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。
-s 使用短模式。不显示登录时间、JCPU和PCPU时间。
-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件 作一些修改使得显示该项成为默认值。
-V 显示版本信息。
who是与w类似的命令,提供当前登录用户列表、系统启动时间、运行级别等。
whoami 命令输出当前用户ID
pgrep命令
pgrep命令以名称为依据从运行进程队列中查找进程,并显示查找到的进程id。每一个进程ID以一个十进制数表示,通过一个分割字符串和下一个ID分开,默认的分割字符串是一个新行。对于每个属性选项,用户可以在命令行上指定一个以逗号分割的可能值的集合。
语法格式
pgrep(选项)(参数)
参数
-o:仅显示找到的最小(起始)进程号;
-n:仅显示找到的最大(结束)进程号;
-l:显示进程名称
-P:指定父进程号
-g:指定进程组
-t:指定开启进程的终端
-u:指定进程的有效用户ID。
ipcs命令
ipcs命令报告进程间通信设施状态。(共享内存,消息量和消息队列)用-p参数联合-m、-s、-q使用
可以获得相关的进程间通信的进程ID。