进程和计划任务管理
查看进程
程序和进程的关系
程序
- 保存在硬盘、光盘等介质中可执行代码和数据
- 静态保存的代码
进程
- 在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计划任务的配置字段