第1页:第25章进程和作业控制
本页为第25章进程和作业控制的章节封面,标示本章讲解的进程生命周期、作业控制与守护进程。
第2页:本章需要解决的几个问题
- 进程来源于何处?
- 系统怎么管理进程?
- 如何控制自己的进程?
第3页:26.1内核管理进程的方式
- 进程ID,或PID:内核赋予进程的唯一编号
- 进程:加载到内存中准备运行的程序
第4页:26.1内核管理进程的方式:进程表
- 进程表
- 保存描述和管理进程所需信息的表
- 调度器
- 对进程的运行进行调度的程序
第5页:内核管理进程的方式:进程管理方式描述进程
- 进程管理方式描述进程启动后,进入等待列表。在每个CPU时间片内,由调度器从等待列表中选择一个进程,给予这个进程在一个时间片内的运行机会。
第6页:26.2进程分叉到死亡
- 进程管理
- 进程间通信
- 输入/输出
- 安全和访问控制
- 网络访问
- 内核可以为进程提供的服务:-内存管理
第7页:进程分叉到死亡:进程访问内核的服务的
- 进程访问内核的服务的方式
- -系统调用
- 常用的系统调用
- -见下表
第8页:进程控制相关的系统调用
进程控制相关的系统调用:下表列出课件中的对应条目。
进程控制相关的系统调用| 目的 | 系统调用 |
|---|
| 创建当前进程的副本进程 | fork |
|---|
| 等待另一个进程结束执行 | wait |
|---|
| 在当前进程中执行一个新程序 | exec |
|---|
| 终止当前进程 | exit |
|---|
| 向进程发送信号 | kill |
|---|
| 打开文件 | open |
|---|
| 从文件中读取数据 | read |
|---|
| 向文件中写入数据 | write |
|---|
| 关闭文件 | close |
|---|
第9页:进程分叉到死亡:shell进程-查看
- shell进程-查看shell进程的PID:echo $$
第10页:进程分叉到死亡:shell进程
- shell进程-shell进程中运行外部命令:1.调用fork,创建shell进程的一个副本进程,副本进程调用exec,执行外部命令的进程;2.父进程调用wait暂停自身运行,直到子进程运行结束,由内核唤醒;3.外部命令执行结束后,副本进程调用exit终止自身运行。
第11页:进程分叉到死亡:僵进程-进程死亡后
- 僵进程-进程死亡后,被称为僵进程。-子进程称为僵进程后,内核唤醒父进程,父进程查看进程表中僵进程的条目,然后内核将僵进程条目删除
第12页:26.3孤儿进程和废弃进程
- 孤儿进程-进程分叉后,意外死亡,只剩下子进程,此时子进程被称为孤儿进程。
- 废弃进程-孤儿进程称为僵进程后,称为废弃进程。
第13页:孤儿进程和废弃进程:孤儿进程-进程分叉后
- 孤儿进程-进程分叉后,意外死亡,只剩下子进程,此时子进程被称为孤儿进程。
- 废弃进程-孤儿进程称为僵进程后,称为废弃进程。
第14页:孤儿进程和废弃进程:现代Unix系统对孤
- 现代Unix系统对孤儿进程的处理-孤儿进程自动被#1进程(init进程)收养,在孤儿进程成为僵进程后,由#1进程进行清除。
第15页:26.4区分父进程和子进程
- 利用fork的返回值区分父进程和子进程intret = fork();if(ret > 0)wait();elseexec(binfile);
第16页:26.5 #1子进程:init
- 所有进程的父进程:#0进程-#0进程是内核直接创建的第一个进程,不是任何进程的子进程-#0进程在执行完部分初始化操作后,调用fork,创建#1进程,然后#0进程进入空闲运算,称为空闲进程-#0进程称为空闲进程后,没有进程运行时,就调用空闲进程。
第17页:#1子进程:init:第一个子进程
- 第一个子进程:#1进程-#1进程执行设置内核和结束引导过程所需的剩余步骤,因此又称init进程-#1进程永远不会停止运行,一直到系统关闭
第18页:26.6前台进程和后台进程
- 前台进程-当shell中输入一条新命令,需要等待当前命令进程结束时,称当前进程为前台进程
- 后台进程-当shell中命令进程运行时,不会影响新命令的执行,称当前进程为后台进程
第19页:前台进程和后台进程:后台运行命令-
- 后台运行命令-在shell命令后面加一个&例如:sort <bigfile> results &
第20页:前台进程和后台进程:后台进程如何操作标准
- 后台进程如何操作标准输入输出-如果需要从stdin读取数据,要么无限期等待;要么使用fg命令将进程移至前台;-如果需要向stdout写入数据,则直接输出到stdout,但可能会打乱前台进程的输出。
第21页:26.7创建延迟
- 命令:sleepsleepinterval[s|m|h|d]其中:interval:延迟的时长s|m|h|d:秒|分|时|天,默认是秒例如:sleep 5(延迟5秒)sleep 5m
第22页:26.8作业控制
- 作业(job)-每条输入的命令,称为一个作业。每个作业由一个唯一的作业号来标识。
第23页:26.8作业控制
- 作业(job)的操作含义操作显示作业列表jobs显示进程列表ps将作业移至前台fg将作业移至后台bg挂起当前shellsuspend挂起当前前台作业^Z向作业发送信号;默认发送终止信号kill
第24页:26.8作业控制
- 作业(job)和进程的区别
- 作业由shell控制,进程由内核控制
- 作业指解释整个命令行所需的全部进程,进程只对应单独的命令例如:who | cut-c 1-8 | sort | uniq-cdate; who; uptime; cal 11 2012
第25页:26.9在后台运行作业
- 后台运行作业-命令末尾加&例如:ls> temp &-shell会显示作业的作业号和进程号例如:[1] 4003如果是管道线,看到的是最后一个进程的PID-作业执行结束后,shell发出提示例如:[1] Donels> temp
第26页:26.10挂起作业
- 后台运行
- 暂停
- 作业的3种状态:-前台运行
- 暂停前台作业的方式:-按^Z,使作业中的进程挂起
第27页:26.10挂起作业:作业状态直接的切换
- 作业状态直接的切换
- -前台运行->暂停按^Z,使作业中的进程挂起-暂停->前台运行执行fg命令
第28页:26.11挂起shell
- 挂起shellsuspend[-f]其中:-f:强制挂起登录shell,默认不允许
- 恢复shellfg
第29页:26.13显示作业列表
- 命令
- jobsjobs[-l]其中:-l:长显示,显示进程ID、作业号、命令名(比正常显示多了进程ID)
第30页:26.13显示作业列表
- 例子:$ jobs-l[1]2288 Stopped vim doc[2] 2290 Running make game >makeop&[3]-2291 Stopped less /etc/passwd[4]+ 2319 Stopped mancal
第31页:26.14将作业移至前台
- 命令
- fgfg%[job]%[job]
第32页:将作业移至前台:指定作业的表达方式
- 指定作业的表达方式:含义操作当前作业%当前作业%+前一个作业%-作业#n%n含有命令名name的作业%name命令中任意位置含有name作业%?name
第33页:26.14将作业移至前台
- 例子:$fg/fg% /fg%+(将当前作业移至前台)$fg%-(将前一个作业移至前台)$fg%1$fg%make$fg%?game
第34页:26.15将作业移至后台
- 命令
- bg[%job…]
- 将前台作业移至后台的过程
- -按^Z,挂起当前作业;-运行bg,前挂起的作业移至后台继续运行。
第35页:26.17 ps程序:基本技能
- 语法定义:UNIX:ps[-aefFly] [-ppid] [-uuserid]BSD:ps[ajluvx] [ppid] [uuserid]
第36页:ps程序:基本技能:UNIX选项
- UNIX选项:含义选项与指定用户标识和终端相关的进程ps-ppid与指定终端相关的进程ps-uusrid与任何用户标识和终端相关的进程ps-a所有进程ps-e只显示守护进程ps-t-
第37页:ps程序:基本技能:显示哪些数据列
- 显示哪些数据列:含义选项PID TTY TIME CMDpsUID PID PPID C TTY TIME CMDps-fUID PID PPID C SZ RSS STIME TTYTIME CMDps-FF S UID PID PPID C PRI NI ADDR SZWCHAN TTY TIME CMDps-lS UID PID PPID C PRI NI RSS SZWCHAN TTY TIME CMDps–ly
第38页:26.18 ps程序:选择选项
- 准则
- 满足要求,且输出量最少
第39页:26.19 ps程序:状态
- 状态列
- UNIX:S列BSD:STAT列
- 显示状态列
- UNIX:ps-l /ps-lyBSD:所有选项都显示STAT列
第40页:26.19 ps程序:状态:进程状态代码
- 进程状态代码
- 含义状态不可中断睡眠D空闲I正在运行或可运行R可中断睡眠S挂起T僵进程Z
第41页:26.19 ps程序:状态
- 例子:ps-lyS UID PID PPID C PRI NI RSS SZ …S 500 8175 1879 0 75 0 464 112T 500 8885 8175 0 75 0 996 366R 500 9067 8175R 500 9069 8175
第42页:26.20监视系统进程
- top命令:top[-ddelay] [-ncount] [-ppid[,pid]…]其中:delay:刷新间隔count:刷新的总时间量
- ps命令的缺陷:-进程信息的静态快照,不能显示进程信息的动态变化
第43页:监视系统进程:top命令的显示结果
- top命令的显示结果
- -按CPU使用率排序-每行描述一个进程
第44页:26.21显示进程树
- 命令:pstree[-aAcGnpu] [pid | userid]其中:-a:显示每个进程的命令行-A:使用ASCII字符绘制树-G:使用行绘制字符绘制树-c:扩展所有子树
第45页:26.21显示进程树:命令
- 命令:pstree[-aAcGnpu] [pid | userid]其中:-u:显示子进程和父进程的userid不同时,所发生的改变-n:按PID排序-p:显示进程的PID
第46页:26.21显示进程树
- 例子:$ pstreeinit-+-amp|-and|-crond|-2*[dbus-daemon---{dbus-daemon}]|-dbus-launch
第47页:26.22 fusr
- 功能
- 显示文件被哪个进程所使用
- 命令
- fusrfile
第48页:26.22 fusr
- 例子:$ find /-name foo–print > bar &[3] 3799$ fuser barbar: 3799
第49页:26.23杀死进程:kill
- 功能
- 在^C不起作用时,可以使用kill杀死进程
- 命令
- kill[-9]pid…| jobid…其中:-9:发送“确定杀死”信号9
第50页:26.23杀死进程:kill
- 例子:杀死进程$ kill 5505杀死作业:$ kill 2$ kill %-$ kill %make$ kill %?game
第51页:26.24向进程发送信号:kill
- 语法定义
- kill[-signal]pid…| jobid…其中:-signal:发送的信号
第52页:向进程发送信号:kill
- 查看所有可用信号kill-l不支持这个命令,可以查找signal.h文件,并显示其内容
第53页:向进程发送信号:kill
- 常用信号含义缩写名称编号终止:注销或终端失去连接时发送给进程HUPSIGHUP1中断:按下^C时发送INTSIGINT2杀死:立即终止,进程不能捕获KILLSIGKILL9终止:请求终止,进程不能捕获TERMSIGTERM15继续:恢复挂起的进程,由fg和bg发送CONTSIGCONT18挂起:按下^Z时发送STOPSIGSTOP19
第54页:26.25设置进程的优先级:nice
- 语法定义:nice[-nadjustment]command其中:adjustment:0~19的数值,值越高,优先级越低,默认是10对于超级用户,可以设为负值:-20~-1,提高优先级command:命令名
第55页:设置进程的优先级:nice
- 使用nice的注意事项:-nice只能应用于自己独立的程序,对于内部命令、管道线或复合命令不能降低优先级;-只能对后台运行的程序降低优先级。
第56页:26.25设置进程的优先级:nice
- 例子
- $ nice gcc myprogram.c &$ nice-n 19 calulate &
第57页:26.26改变进程的优先级:renice
- 语法定义:reniceniceness-pprocessid其中:niceness:nice值processid:进程id
第58页:26.27守护进程
- 守护进程
- 没有控制终端的后台进程。
- 查看守护进程
- ps-t-| less或ps–e | grep ‘?’ | less
第59页:常见守护进程(一)
常见守护进程(一):功能与进程名:下表列出课件中的对应条目。
常见守护进程(一):功能与进程名| 功能 | 进程名 |
|---|
| 所有其它进程的祖先,收养孤儿进程 | init |
|---|
| Apache Web服务器 | apache |
|---|
| at程序排列的作业 | atd |
|---|
| 管理预调度作业的执行 | crond |
|---|
| 打印调度器 | cupsd |
|---|
| 动态配置TCP/IP信息 | dhcpd |
|---|
第60页:常见守护进程(二)
常见守护进程(二):功能与进程名:下表列出课件中的对应条目。
常见守护进程(二):功能与进程名| 功能 | 进程名 |
|---|
| FTP服务器 | ftpd |
|---|
| 网关 | gated |
|---|
| Web服务器 | httpd |
|---|
| Internet服务 | inetd |
|---|
| 内核模块加载或卸载 | kerneld |
|---|
| 启动过程中检测硬件变化 | kudzu |
|---|
第61页:常见守护进程(三)
常见守护进程(三):功能与进程名:下表列出课件中的对应条目。
常见守护进程(三):功能与进程名| 功能 | 进程名 |
|---|
| 打印队列 | lpd |
|---|
| MySQL数据库服务器 | mysql |
|---|
| DNS域名服务器 | named |
|---|
| 网络文件访问 | nfsd |
|---|
| 时间同步 | ntpd |
|---|
| 远程过程调用 | rpcbind |
|---|
第62页:常见守护进程(四)
常见守护进程(四):功能与进程名:下表列出课件中的对应条目。
常见守护进程(四):功能与进程名| 功能 | 进程名 |
|---|
| 路由信息管理 | routed |
|---|
| swapper的别名 | sched |
|---|
| SMTP服务器 | sendmail |
|---|
| Windows客户端文件共享与打印服务 | smbd |
|---|
| SSH连接 | sshd |
|---|
| 将数据从内存复制到交换空间,回收内存 | swapper |
|---|
第63页:常见守护进程(五)
常见守护进程(五):功能与进程名:下表列出课件中的对应条目。
常见守护进程(五):功能与进程名| 功能 | 进程名 |
|---|
| 文件系统与系统内存内容的同步 | syncd |
|---|
| 收集各种系统消息 | syslogd |
|---|
| Internet服务 | xinetd |
|---|