目录
程序和进程的关系
程序
-
保存在硬盘、光盘等介质中可执行代码和数据
-
静态保存的代码
进程
-
在CPU及内存中运行的程序代码
-
动态执行的代码
-
父、子进程
-
每个程序可以创建一个或多个进程
-
-
程序二进制的文件、静态。
-
进程是程序运行的过程属于动态,有生命周期及运行状态
程序 进程 线程的关系
线程包含在进程之中,是进程中的实际运作单位,也是操作系统中能够独立运行的基本单位,也称作轻量进程,一个进程中可以并发多个线程,每一条线程可以并行执行不同的任务,而我们在任务管理器中看到的一个个进程,则由我们的下载的应用程序所产生的,当然一个应用程序也可以包含多个进程
协程利用线程等待是时间去做别的事 切换任务源 提高任务效率
查看进程信息ps
查看静态的进程统计信息
[root@localhost~]#ps -aux
[root@localhost~]#ps -elf #将以长格式显示系统中的进程信息
方法一 aux
-
常用参数
-a:显示当前终端下的所有进程,包括其他用户的进程。与"x"选项结合时将显示系统中所有的进程信息 -u:使用以与用户为主的格式输出进程信息 -x:显示当前用户在所有终端下的进程信息
-
常用的选项组合
ps -aux #将以简单的列表的形式显示出进程信息 上述输出信息中,第一行为列表标题,其中各字段的含义描述如下 USER:启动该进程的用户账号的名称。 PID:该进程在系统中的数字ID 号,在当前系统中是唯一的。 %CPU:CPU占用的百分比。 %MEM:内存占用的百分比。 vsz:该进程使用的虚拟内存量(KB)。 RSS:该进程占用的物理内存量(KB)。 TTY:表明该进程在哪个终端上运行。不是从终端启动的进程则显示为?。 简说: pts是远程登录终端ctrl+ALT F1-F6 tty1图像界面 2和6字符界面 ?系统本身自身执行的进程
STAT:该进程的状态(D:不可中断的休眠状态;R:正在运行状态;S:休眠状态,可被唤醒;T:停止状态,可能时在后台暂停或进程处于跟踪调试状态;Z:僵尸进程,进程已经中止,但是部分程序还在内存当中)
D:系统守护进程 T:调式、程序执行一般停止 R:该程序目前正在运作,或者是可被运作; S:该程序目前正在睡眠当中(可说是 idle状态啦! ),但可被某些讯号(signal)唤醒。 T:该程序目前正在侦测或者是停止了; Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie(疆尸)程序的状态D不可中断状态. 它们含意如下: <:表示进程运行在高优先级上 N:表示进程运行在低优先级上 L:表示进程有页面锁定在内存中 s:表示进程是控制进程 l:表示进程是多线程的 +:表示当前进程运行在前台 D:系统守护进程 T调式、程序执行一般停止 START:启动该进程的时间。 TIME:该进程占用的cPU时间。 COMMAND:启动该进程的命令的名称
方法二 elf
-e:显示系统内的所有进程信息 -l:使用长格式显示进程信息 -f:使用完整的格式显示进程信息 各列的解释: F:内核分配给进程的系统标记 S:进程的状态 UID:启动这些进程的用户 PID:进程的进程ID PPID:父进程的进程号(如果该进程是由另一个进程启动的) C:进程
查看动态的进程信息top
[root@localhost~]#top
-D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
-R:该进程正在运行。
-S:该进程处于睡眠状态,可被唤醒。
-T:停止状态,可能是在后台暂停或进程处于除错状态。
-W:内存交互状态(从 2.6 内核开始无效)。
-X:死掉的进程(应该不会出现)。
-Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
-<:高优先级(以下状态在 BSD 格式中出现)。
-N:低优先级。
-L:被锁入内存。
-s:包含子进程。
-l:多线程(小写 L)。
-+:位于后台。
-C:进程占用CPU的百分比
查看进程信息pgrep
根据特定条件查看进程信息
[root@localhost~]# pgrep
[root@localhost~]#pgrep -l "log"
2538 rsyslogd
2113 mcelog
[root@localhost~]# pgrep -l -U teacher -t tty1
27483 bash
27584 vim
查看进程信息pstree
pstree命令
-
以树形结构列出进程信息
[root@localhost~]# pstree -aup
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
控制进程
进程的启动方式
手工启动
-
前台启动:用户输入命令,直接执行程序
-
后台启动:在命令行尾加入“&”符号
[root@local~]# cp /dev/cdrom mycd.iso $
[1] 28454
调度启动
-
使用at命令,设置一次性计划任务
-
使用crontab命令,设置周期性计划任务
进程的前后台调度
ctrl+z组合键
-
将档期那进程挂起,即调入后台并执行
jobs命令
-
查看处于后台的任务列表
fg命令
将后台进程恢复到前台运行,可指定任务序号
[root@localhost~]# jobs
[1]- Stopped cd /dev/cdrom mycd.iso
[2]+ Stopped top
[root@localhost~]# fg 1
终止进程的运行
ctrl+C组合键
-
中断正在执行的命令
kill、killall命令
-
kill用于终止指定PID号的进程
-
killall用于终止指定名称的所有进程
-
-9选项用于强制终止
pkill命令
根据特定条件终止相应的进程
常用命令选项
-U:根据进程所属的用户名终止相应进程
-t:根据进程所在的终端相应进程
[root@localhost~]# pgrep -l -U "hackli"
3045 bash
[root@localhost~]# pkil -9 -U "hackli"
[root@localhost~]# pgrep -l -U "hackli"
at一次性任务设置
at命令
-
一次性计划任务
at [HH:MM] [yyyy-mm-dd]
[root@localhost ~]# date
Sun May 7 10:33:13 EDT 2017
[root@localhost ~]# at 10:35 2017-05-07
at> pgrep -U root|wc -l > /tmp/ps.root
at> <EOT>按Ctrl+D键提交任务
job 1 at Sun May 7 10:35:00 2017
[root@localhost ~]# cat /tmp/ps.root
202
案例
在当天的21:30时自动关闭当前系统
[root@localhost ~]# at 21:30
at> shutdown -h now
at> <EOT>
job 2 at Sun May 7 21:30:00 2017
[root@localhost ~]# atq 查看未执行的任务列表
2 Sun May 7 21:30:00 2017 a root
[root@localhost ~]# atrm 2 删除第2条任务
[root@localhost ~]# atq
crontab周期性任务设置
crontab任务配置的格式
分钟 小时 日期 月份 星期 命令
字段 | 说明 |
---|---|
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,0或7表示星期日 |
命令 | 要执行的命令或程序脚本 |
时间数值的特殊表示方法
-
*表示该范围的任意时间
-
,表示间隔的多个不连续的时间点
-
-表示一个连续的时间范围
-
/指定间隔的时间频率
应用实例
0 17 * * 1-5 #周一到周五每天17:00
30 8 * * 1,3,5 #每周一、三、五的8点30分
0 8-18/2 * * * #8点到18点之间每2小时
0 * */3 * * #每三天
总结
-
查看进程的命令(ps、top.pgrep.pstree)
-
进程控制
-
启动进程、调度进程、终止进程
-
at命令设置计划任务
-
-
crontab计划任务的配置字段