2.1 进程的基本概念
2.1.1 程序的顺序执行及其特征 1.程序的顺序执行
程序是人们要计算机完成的一些指令序列,是一个按严格次序、顺序执行的操作序列,是一个静态的概念。我们把一个具有独立功能的程序独占处理机,直到最后结束的过程称为程序的顺序执行。
2.1.2 进程的定义与特征 1.进程的定义
人们对进程下过许多定义。现列举其中的几种:
进程是程序的一次执行。
进程是可以和别的进程并发执行的计算。
进程就是一个程序在给定活动空间和初始条件下,在一个处理机上的执行过程。 进程是程序在一个数据集合上的运行过程,它是系统进行资源分配和调度的一个独
立单位
进程是动态的,有生命周期的活动。内核可以创建一个进程,最终将由内核终止该
进程使其消亡。
进程和程序是两个完全不同的概念,但又有密切的联系。它们之间的主要区别是:
程序是静态的概念;而进程则是程序的一次执行过程。它是动态的概念。
进程是一个能独立运行的单位,能与其它进程并发执行;而程序是不能作为一个独
立运行的单位而并发执行的。 程序和进程无一一对应的关系。
各个进程在并发执行过程中会产生相互制约关系,而程序本身是静态的,不存在这
种异步特征。
2.1.3 进程的基本状态及转换 1.进程的三个基本状态
进程通常至少有三种基本状态: (1)就绪状态(ready)
进程运行所需的外部条件满足,但因为其它进程已占用CPU,所以暂时不能运行。 (2)执行状态(running)
外部条件满足,进程已获得CPU,其程序正在执行。在单处理机系统中,只有一个进程处于执行状态。
(3)阻塞状态(blocked)
进程因等待某种事件发生,而暂时不能运行的状态,称为阻塞状态,也称为等待状态。系统中处于这种状态的进程可能有多个,通常将它们排成一个队列,也有的系统则根据阻塞原因的不同将这些进程排成多个队列。 2.进程状态的转换
对于一个系统中处于就绪状态的进程,在调度程序为之分配了处理机之后,该进程便可执行,相应地,它由就绪态转变为执行状态。正在执行的进程也称为当前进程,如果因分配给它的时间片已用完而被暂停执行时,该进程便由执行状态又回到就绪状态;一个处在执行状态的进程,如果因发生某事件而使进程的执行受阻,使之无法继续执行,该进程将由执行
状态转变为阻塞状态。一个处于阻塞状态的进程,当它所需的外部事件满足,它应由阻塞状态变为就绪状态。
执行 状态 进程调度 时间片用完 完成或撤销 等待某事件发生 或I/O请求 进程 创建 就绪 状态 外部事件发生 进程的基本状态及转换
阻塞 状态
3.引入挂起状态时的进程状态
所谓挂起状态,实际上就是一种静止的状态。一个进程被挂起后,不管它是否在就绪状态,系统都不分配给它处理机。 在引入挂起状态后,进程之间的状态转换除了四种基本状态转换以外,又增加了以下几种:
(1)活动就绪——静止就绪。 (2)活动阻塞——静止阻塞。 (3)静止就绪——活动就绪。 (4)静止阻塞——活动阻塞。
执行 状态 调 度 等待外部事件 活动 就绪 外部条件满足 活动 阻塞 挂起 激活 挂起 激活 挂起 完成或撤销 静止 就绪 外部事件满足 静止 阻塞 具有挂起状态的进程状态及转换
2.2 线程
线程(thead)是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。在引入线程的操作系统中,可以在一个进程内部进行线程切换,现场保护工作量小。 线程与进程的比较:
(1)进程是资源分配的基本单位。同一进程的所有线程共享该进程的所有资源。 (2)线程是分配处理机的基本单位,它与资源分配无关。 (3)一个线程只能属于一个进程,而一个进程可以有多个线程,且至少有一个线程。 (4)线程在执行过程中,需要协作同步。 引入线程的好处有以下几点: 1.易于调度。
2.提高了系统的效率。
3.创建一个线程比创建一个进程花费的开销少,创建速度快。 4.有利于发挥多处理器的功能,提高进程的并行性。
Win 2000系统进程管理
Windows 2000/XP 的任务管理器是一个非常有用的工具,它能提供我们很多信息,比如现在系统中运行的程序(进程),但是面对那些文件可执行文件名我们可能有点茫然,不知道它们是做什么的,会不会有可疑进程(病毒,木马等)。下面在Windows 2000 中,系统包含的缺省进程以及它们的简要说明:
进程名描述
• Csrss.exe 子系统服务器进程 • Explorer.exe 资源管理器
• Internat.exe 托盘区的拼音图标 • Lsass.exe 管理 IP 安全策略
• Mstask.exe 允许程序在指定时间运行
• Smss.exe Session Manager
• Spoolsv.exe 将文件加载到内存中以便打印 • Svchost.exe Win 2000/XP 的文件保护系统 • Services.exe 包含很多系统服务 • Taskmgr.exe Windows任务管理 • Winlogon.exe 管理用户登录
• Winmgmt.exe 提供系统管理信息(系统服务) • System Idle Process
用于统计剩余的CPU资源情况,此进程是不可以从任务管理器中关掉的
有时会碰到一些进程,象“winjava.exe”病毒的进程,在任务管理器里是终止不了的,可以借助ntsd 在命令行下终止进程。ntsd从2000开始就是系统自带的用户态调试工具。
开个cmd.exe窗口,输入命令: c:\\>ntsd -c q -p PID 其中:-c是执行调试命令,q是退出,-p是指用pid来处理。
Linux进程管理
Linux进程中最知名的属性就是它的进程号(PID)和它的父进程号(PPID)。一个PID唯一地标识一个进程,一个进程创建新进程称为创建了子进程,创建子进程的进程成为父进程。所有进程追溯其祖先最终都会落到进程号为1的进程身上,这个进程叫做init进程,是内核自举后第一个启动的进程。
Linux操作系统包括了3种不同类型的进程:
• 交互进程:由一个shell启动的进程。可在前台运行,也可以在后台运行; • 批处理进程:这种进程和终端没有联系,是一个进程序列 • 监控进程:Linux系统启动时启动的进程,并在后台运行
Linux进程启动
输入需要运行的程序名,执行一个程序,其实就是启动了一个进程。启动一个进程有两种途径:手工启动和调度启动。后者是事先进行设置,根据用户需要自行启动
1. 手工启动
①前台启动: # find /-name fox.jpg ②后台启动:
#find /-name fox.jpg>findresult.txt & [1] 9137
•后台进程在命令结尾加上一个“&”号,输入命令后,出现一个数字,即PID,用户可以继续其他操作。
•这两者启动方式共同点:新进程都是由当前shell进程产生的,shell是父进程,新进程是子进程。一般子进程结束后才能结束父进程,如果是从后台启动,那么就不需要等待子进程结束了。
•管道进程: # ls –al | more 此命令同时启动了3个进程,所有放在管道两边的进程将被同时启动,它们都是当前shell的子程序,互相成为兄弟进程 2. 调度进程
• At命令:在指定时刻执行指定的命令序列
at [-v] [-q 队列] [-f 文件名] [-mldbv] 时间 -v 将标准版本号打印到标准的错误中
-q queue 使用指定的队列,队列名由单个字母组成。 -m 作业结束后发送邮件给执行at命令的用户
-f file 使用命令从指定的file中读取,而不是从标准输入读取 -c 将命令行上所列的作业送到标准输出
例1:在三天后下午4点执行文件work中的作业: # at –f work 4pm +3 day
例2:找出系统中所有.txt为后缀的文件,并进行打印,打印结束后,给用户ncs发邮件通知取文件,指定时间:12月25日凌晨2点 #at 2:00 12/25/2007
at>find /-name “*.txt” | lpr
at>echo “ncs:All texts have been printed.You can take them over!” |mail –s “job done” ncs
如果命令序列较长或经常被执行时,可将该序列写到一个文件中,然后将文件作为at命令的输入来处理:
如:将上例命令写入文件:/tmp/printjob # at –f /tmp.printjob 2:00 12/25/2007 或 # at < /tmp.printjob 2:00 12/25/2007
在任何情况下,超级用户都可以使用这个命令,对于其他用户,是否能使用取决于
/etc/at.allow和/etc/at.deny两个文件,如果/etc/at.allow存在,则只有在其中列出的用户可以使用at命令,如果该文件不存在,检查/etc/at.deny,如存在,在此文件中泪出的用户均不能使用该命令,空的/etc/at.deny意味着所有的用户都可以使用该命令 • batch命令
用于低优先级运行作业,功能与at相同,只是batch在系统负载较低,资源较空闲的时候执行,适用于执行占资源比较多的命令
• cron命令
at和batch命令都只能执行一次,cron可重复执行一些命令
Linux进程查看
• who命令
用于查看当前在线的用户情况
# who –uH (以标题方式察看登录的用户)
NAME:登录用户帐号 LINE:登录使用的终端 TIME:登录时间 IDLE:显示用户空闲时间(”.” 表示该用户前1秒仍是活动的) COMMENT:用户从什么地方登录的网络地址
• w命令
不但可以显示有谁登录到系统,还可以显示这些用户正在进行的工作
W命令的显示项目:当前时间、系统启动到现在的时间、登录用户的数目、系统最近1s,5s和15s的平均负载
以及每个用户的各项数据:登陆帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行的进程命令行
•JCPU:与该终端连接的所有进程占用的时间,其中不包括过去的后台作业时间,但包括当前正在运行的后台作业所占用的时间
•PCPU:当前进程(what项中显示的进程)所占用的时间
• ps命令
最基本,同时也是非常强大的进程查看命令,该命令可确定有哪些进程正在运行以及运行的状态,进程是否结束,进程有没有僵死,哪些进程占用了过多的资源
ps命令最常用于监控后台进程的工作情况,后台进程是不和屏幕,键盘这些标准输入/输出设备通信的,需检测其情况时,可使用ps # ps
显示4项:PID(进程ID)、TTY(终端名)、TIME(进程执行时间)、COMMAND(进程命令行输入)
ps命令只能显示所有控制终端的进程,对于没有控制终端的进程需使用x选项来查看 #ps x
使用a选项可查看当前所有用户的所有进程,使用aux组合选项,可显示最详细的进程情况 #ps aux
•top命令
是一个动态显示进程的过程,可通过用户按键不断刷新当前状态监视(默认5s更新一次) 显示项目:
uptime:显示系统启动时间,已经运行的时间和3个平均负载值 processes:自最近一次刷新以来的运行
CPU status:显示用户模式,系统模式,优先级进程和闲置等各种情况所占用CPU时间的百分比
Mem:内存使用情况统计 swap:交换空间统计 PRI:每个进程的优先级 NI:该进程的优先级值 LIB:使用的库页的大小
SIZE:进程的代码大小+数据大小+堆栈空间大小(单位KB)
RSS:该进程占用的物理内存总数量(单位KB) SHARE:该进程使用共享内存数量 STAT:该进程的状态:S:休眠状态;D:不可中断的休眠状态;R:运行状态;Z:僵死状态;T:停止或跟踪状态
TIME:该进程自启动以来所占用的总CPU时间
%CPU:该进程最近一次刷新以来所占用的CPU时间相对总时间的百分比 %MEM:该进程占用物理内存相对总内存的百分比
Linux进程结束
• kill命令 # kill 4840
对于僵尸进程,可用# kill -9 强制终止退出 • killall命令
通过程序名,直接杀死所有进程
因篇幅问题不能全部显示,请点此查看更多更全内容