一、进程的概念
进程:开始执行但是还没有结束的程序的实例
程序:包含可执行代码的文件
进程与程序的关系
进程由程序产生,是一个运行着的、要占系统资源的程序
进程不等于程序
浏览网络时,打开多个IE浏览器程序;不同的IE浏览器打开不同的网页,但每个IE浏览器都使用了相同的iexlporer.exe程序。
操作系统如何辨认相同程序打开的不同的网页,并将每一个执行中的程序识别出来?
二、进程的调度
在Linux系统中,每运行一个程序时系统就需要启动一个进程,进程的启动可以通过手动的方式直接在命令行下完成,也可以通过调度命令有计划地执行。常用的调度命令有at和crontab。
调度启动
at命令
crontab命令
1.延迟性调度命令at
功能:指定时间运行指定的程序
格式:at [-f 文件] [-m ] 时间
-f : 指定存放计划执行命令的文件
-m: 作业结束后发送邮件给执行at命令的用户
时间:任务执行的时间,可采用相对和绝对两种方法
绝对表示法: MMDDYY或MM/DD/YYYY,也可指定 today 或 tomorrow 来表示今天或明天
相对表示法:now+num+时间单位,其中的时间间隔可以是 minutes, hours, days, weeks
〖例5〗 让系统在两天后的17:30执行文件data中指定的作业
#at -f data 17:30 +2 days
〖例6〗一分钟以后在tty1中,提示 “hello !!”
at now + 1 minutes
at> echo “hello! !” >/dev/tty1
at> ctrl + D
〖例7〗明天凌晨2点 将正在登陆的用户写入/tmp/aaa.txt
at 2:00 tomorrow
at> w > /tmp/aaa.txt
at> ctrl + D
〖例8〗一分钟以后,在家目录中建立文件夹 at
at now + 1 minutes
at>mkdir at
at> ctrl + D
2.周期性调度命令crontab
功能:计划调度服务
crontab –u user {-e | -l | -r}
-u:设定user的时程表
-e:使用vi设定时程表
-l:列出目前的时程表
-r:删除目前的时程表
crontab –u user file
file:存放时程表的文件
时程表格式:minute hour day month day-of-the-week command
空格分割
*代表任意的值
-表达一个范围
用逗号分隔表达一个值的列表
按 ctrl+D结束
〖例9〗 每周四早晨 8:30,提醒用户上午 10:00 有一个会议
#crontab
30 8 * * 4 echo “meeting at 10:00 AM” > /dev/tty1
Ctrl + D
如果需要修改周期性任务,可以执行:
#crontab -e
此时系统会打开一个vim编辑器,用于修改调度任务。
三、进程的查看
1.查看系统进程信息的命令ps
命令语法: ps [选项]
选项说明:
-A:显示系统中所有进程的信息,与-e具有相同的功能。
-a:显示所有用户进程的信息。
-f:完整的显示进程的所有信息。
-l:以长格式显示进程信息。
-r:只显示正在运行的进程。
-u:显示面向用户的格式(包括用户名、CPU及内存使用情况等信息)。
-x:显示所有非控制终端上的进程信息。
-p:显示由进程ID指定的进程的信息。
-t:显示指定终端上的进程的信息。
〖例10〗查看系统中终端上所有用户进程的所有信息。
# ps aux
如果显示的信息过多可以使用管道命令分页查看输出信息:
# ps aux| less
如果想查看用户glenda的所有进程信息可以执行下面的命令:
# ps aux | grep Glenda
2.查看各进程继承关系的命令pstree
pstree命令以树状结构显示系统进程的继承关系。树状图将会以 pid (如果有指定) 或是以 init为根,如果指定user,则树状结构只显示该用户所拥有的进程。
命令格式: pstree [选项] [pid|user]
选项说明:
-a:显示该进程的完整继承关系,如果是被内存置换出去的进程则会加上括号。
-c 如果有重复的进程名, 则分开列出 (默认值是会在前面加上 * )。
pid|user:查看指定根进程(pid)或用户(user)所拥有的进程。
四、进程的终止
终止进程的kill 命令
功能:结束指定进程的运行
格式:kill [-9] 进程号
进程号:每个进程都有一个PID
-9 :强行结束指定进程的运行
〖例11〗 终止sshd服务进程的执行。
#ps -A | grep sshd//查询sshd服务进程的pid
#kill 1097 //1097是sshd服务进程的pid
通过进程名终止进程的killall命令
功能:
killall命令通过进程的名字,直接杀死进程。通常与ps命令结合在一起使用的。
格式:killall [-9] 进程名
〖例12〗终止所有sshd进程。
# killall sshd
五、作业控制的概念
作业控制是指控制当前正在运行的进程的行为。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。例如,系统资源紧张的时候,用户可以挂起一个不紧急的、正在运行的进程,稍后再恢复它的运行。Shell会记录所有系统中的进程,并保持对进程状态的跟踪。
例如,完整地看完一个DVD碟是一个完整的任务,由一个独立的进程来完成。看碟的过程是进程处于运行状态,但是在观看的过程中,遇到电话、敲门等事务的干扰,此时电话、敲门是紧急、首要需解决的事务,不是非常紧急的事情——看DVD的过程——将被暂停,暂停的过程即是正在运行进程的挂起。当处理完突发事务——电话或敲门——以后,可以将被暂停的DVD播放过程重新激活,继续完成这个任务。这即是一个简单的作业控制的例子:运行à暂停à运行。
命令 | 功能说明 |
Ctrl+d | 正常终止一个正在前台运行的进程 |
Ctrl+c | 强行终止一个正在前台运行的进程 |
Ctrl+z | 挂起一个正在前台运行的进程 |
jobs | 查看后台运行或者被挂起的进程 |
bg(background) | 将被挂起的进程调到后台运行 |
fg(foreground) | 将被挂起的进程调到前台运行 |
cmd & | 直接在后台启动运行一个新的命令,不占用终端资源 |
kill | 杀死进程 |
项目三:进程的延迟与周期调度
操作过程
$at 4:50pm
at> echo “I’m off work now. ”> /dev/tty1
at><EOT>
$crontab
30 5 * * * ls -l | grep .port > list
按 ctrl+D结束
$./test
$ps aux | grep test
$kill -9 6424