进程和计划任务管理
- 一.程序和进程的关系
- 1.程序
- 2.进程
- 3.线程
- 4.线程与进程的关系
- 二.查看信息进程 ps aux
- 三.查看进程信息ps -elf
- 四.查看进程信息top
- 1.第一行是 任务队列信息
- 2.第二行是 进程信息
- 3.第三行是 CPU的信息
- 5.第五行是 交换空间的信息
- 6.进程信息区各列解释
- 五.查看进程信息 pgrep
- -l:显示进程名,缺省时只输出PID号
- -U:指定特定用户,-t:指定终端
- 六. 查看进程树 pstree
- 七. 进程的启动方式
- 1. 手工启动
- 2.调度启动
- 八. 进程的前后台调度
- 1. Ctrl+Z组合键
- 2. jobs命令
- 3. fg命令
- 九. 终止进程的运行
- 1.Ctrl+C组合键
- 2. kill、killall命令
- 4. pkill命令
- 十.计划任务管理 _____一次性计划任务 at
- 想在今天的18:41 计划管理任务设定重启
- 查看未执行的任务列表
- 删除第1条任务
- 十一. 计划任务管理 __ 预先设定周期计划任务 crontab
- **crontab命令**
- 编辑计划任务
- 查看计划任务
- 删除计划任务
- 1. crontab任务配置的格式
- 2. 时间数值的特殊表示方法
- 举例:
一.程序和进程的关系
1.程序
- 保存在硬盘、光盘等个质中的可执行代码和数据
- 文件中静态保存的代码
2.进程
-
在CPU及内存中运行的程序代码
-
动态执行的代码
-
父、子进程
-------◆每个程序可以创建一个或多个进程
3.线程
- 操作系统能够进行运算调度的最小单位,包含在进程中,是进程中实际运作单位
- 一个进程中可以并发多个线程,每条线程执行不同的任务
4.线程与进程的关系
- ①:一个进程可以多个线程,但至少有一个线程,一个线程只能在一个进程地址空间内活动
- ②:资源分配给进程,同一进程的所有线程共享所有资源
- ③:CPU分配给线程,即真正在处理器运行的是线程
- ④:线程在执行过程中需要协作同步,不同进程的线程间要利用消息通信的办法实现同步
二.查看信息进程 ps aux
- ps命令
- 查看静态的进程统计信息
[root@localhost ~]# ps aux
或者
[root@localhost ~]# ps -aux
a: | 显示终端上的所有进程,包括其它用户的进程。 |
---|---|
u: | 表示列出进程的用户 |
x: | 显示所有终端的进程 |
- 统计进程信息:
- [root@localhost ~]# ps -aux | wc -l
各列的解释:
USER | 进程的用户 | ||
---|---|---|---|
PID: | 进程的ID。 | ||
&CPU: | 进程占用的CPU百分比。 | ||
&MEM: | 占用内存的百分比。 | ||
vsZ: | 该进程使用的虚拟内存量(KB)。 | ||
RSS: | 该进程占用的物理内存量(KB)。 | ||
TTY: | 启动进程的终端名。不是从终端启动的进程则显示为? | ||
STAT: | 该行程的状态 | ||
D:不可中断的休眠状态 | |||
R:正在运行状态 | |||
S:处于休眠状态,可被唤醒 | |||
T:停止状态,可能是在后台暂停或进程处于跟踪调试状态 | |||
Z:僵尸进程,进程已经中止,但是部分程序还在内存当中 | |||
START: | 该进程被触发启动时间 | ||
TIME: | 该进程实际使用cPU运行的时间 | ||
COMMAND: | 进程的启动命令 |
三.查看进程信息ps -elf
-
ps命令
-
查看静态的进程统计信息
[root@localhost ~]# ps -elf -
-e :显示系统内的所有进程信息
-
-l:使用长格式显示进程信息
-
-f:使用完整的格式显示进程信息
F: | 内核分配给进程的系统标记 |
---|---|
S: | 进程的状态 |
UID: | 启动这些进程的用户 |
PID: | 进程的进程ID |
PPID: | 父进程的进程号( 如果该进程是由另- - 个进程启动的) |
C: | 进程生命周期中的CPU利用率 |
PRI: | 进程的优先级(越大的数字代表越低的优先级) |
NI: | 谦让度值用来参与决定优先级。 |
ADDR: | 进程的内存地址. |
SZ: | 假如进程被换出,所需交换空间的大致大小 |
WCHAN: | 若该进程在睡眠,则显示睡眠中的系统函数名 |
STIME: | 进程启动时的系统时间 |
TTY: | 进程启动时的终端设备 |
TIME: | 运行进程需要的累计CPu时间 |
CMD: | 进程的启动命令 |
僵尸进程:
- 一个进程结束了,但是如果该进程的父进程已经先结束了,那么该进程就不会变成僵尸进程。
- 但是当子进程比父进程先结束,而父进程又没有收回子进程,释放子进程占用的资源,此时子进程将会成为一个僵尸进程。
四.查看进程信息top
- top命令 -----------每隔几秒进行刷新
- 查看动态的进程排名信息
- [root@localhost ~]# top
1.第一行是 任务队列信息
- 11:06:48 --------- 系统时间
- up 1:22--------系统已运行时长
- 4 user--------当前登录用户数
- load average: 0.06, 0.60, 0.48系统 负载,即单位时间内系统处理的任务数,后面三个数值分别为1分钟、5分钟、15分钟前到现在的平均值
2.第二行是 进程信息
- Tasks ------------------总进程数
- running-------------------正在运行的进程数
- sleeping ------------------休眠的进程数
- stopped-------------------中止的进程数
- zombie---------------------僵死的进程数
3.第三行是 CPU的信息
- us ----------------用户占用
- sy-----------------内核占用
- ni------------------优先级调度占用
- id-------------------空闲CPU,要了解空闲的CPU 百分比,主要看%id部分
- wa-----------------I/o等待占用
- hi-------------------硬件中断占用
- si-------------------软件中断占用
- st-------------------虚拟化占用
4.第四行为内存的信息
- total-----------------总交换空间
- free------------------空闲内存
- used-----------------已用内存
- buff/cache ----------物理内存和交换内存的缓冲区总和
5.第五行是 交换空间的信息
- total------------------------总内存空间
- free--------------------------空闲内存
- used-------------------------己用交换空间
- avail Mem---------------------可用物理空间
6.进程信息区各列解释
进程信息区各列解释:
PID | 进程ID |
---|---|
USER | 进程所有者的用户名 |
PR | 优先级 |
NI | 谦让度值,负值表示高优先级,正值表示低优先级 |
VIRT | 进程使用的虚拟内存总量,单位Kb |
RES | 进程使用的物理内存大小,单位kb |
SHR | 共享内存大小,单位kb |
S | 进程状态 |
%cpu | 上次更新到现在CPU占用百分比 |
%MEM | 进程使用的物理内存百分比 |
TIME+ | 进程使用CPU时间总计,单位1/100秒 |
CoMMAND | 命令名/命令行 |
7. top常用命令
P键 | 根据CPU使用百分比大小进行排序 |
---|---|
M键 | 根据驻留内存大小进行排序 |
N键: | 根据启动时间进行排序 |
c键: | 切换显示命令名称和完整命令行 |
h键: | 可以获得top程序的在线帮助信息 |
k键: | 根据提示输入指定进程的PID号并按Enter键终止对应的进程 |
q键: | 退出top程序 |
数字1键 | 显示CPU个数和状态 |
五.查看进程信息 pgrep
- .2538 rsyslogd
- 2113 mcelog
- [root@localhost ~]# pgrep -I -U teacher -t tty2
-
-U:指定特定用户,-t:指定终端
- 27483 bash
- 27584 vim
六. 查看进程树 pstree
- pstree命令
- 以树形结构列出进程信息
[root@localhost ~]# pstree -aup - -a:显示完整信息
- -u:列出对应用户名
- -p:列出对应PID号
- [root@localhost ~]# pstree -ap teacher
- 只查属于指定用户的进程数结构
七. 进程的启动方式
1. 手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号
[root@localhost ~]# cp /dev/cdrom mycd.iso &
######### 输出信息中包括后台任务序号、PID号
2.调度启动
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
八. 进程的前后台调度
1. Ctrl+Z组合键
- 将当前进程挂起,即调入后台并停止执行
2. jobs命令
- jobs -l
- 查看处于后台的任务列表
3. fg命令
- 将后台进程恢复到前台运行,可指定任务序号
- [root@localhost ~]# jobs
- [1]- Stopped . cp /dev/cdrom mycd.iso
- [2]+ Stopped top
- [root@localhost ~]# fg 1
九. 终止进程的运行
1.Ctrl+C组合键
- 中断正在执行的命令
2. kill、killall命令
- kill用于终止指定PID号的进程
- killall用于终止指定名称相关的所有进程
- -9选项用于强制终止
4. pkill命令
- 根据特定条件终止相应的进程
- 常用命令选项
- ---- -U:根据进程所属的用户名终止相应进程
- ---- -t:根据进程所在的终端终止相应进程
- [root@localhost ~]# pgrep -I -U “teacher”
- 3045 bash
- [root@localhost ~]# pkill -9 -U " teacher"
- [root@localhost ~]# pgrep -l -U " teacher" ####查看
十.计划任务管理 _____一次性计划任务 at
-
at命令
-
一次性计划任务
-
at [HH:MM] [yyyy-mm-dd]
-----HH :小时
----- MM:分钟
----- yyyy:年
----- 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 -1 > /tmp/ps.root
-----统计root 用户的进程数量
-------->:把查询到的结果,输入到某个文件中,并且覆盖
-----------统计root用户的进程数量,输入命令,保存到>…目录中,在按CTRL+D提交任务
at> < EOT> #### 按CTRL+D提交任务
想在今天的18:41 计划管理任务设定重启
- at 18:41
- at>init 6
- at>< EOT> ####按crtl+D 提交任务,到18:41时候,会重启:
查看未执行的任务列表
- [root@localhost ~]# atq
- 2 Sun May 7 21:30:00 2017 a root
删除第1条任务
- [root@localhost ~]# atrm 1
- atrm -后面跟的是想要删除的序号
- [root@localhost ~]# atq
十一. 计划任务管理 __ 预先设定周期计划任务 crontab
crontab命令
-----按照预先设置的时间周期(分、时、日、月、周)重复执行用户指定的命令操作
-------- 属于周期性计划任务
---------主要设置文件
---------------------全局配置文件,位于文件: /etc/crontab
----------------------系统默认的设置,位于目录: /etc/cron.*/
----------------------用户定义的设置,位于文件: /var/spool/cron/用户名
编辑计划任务
- crontab -e -u 用户名 :
- -u 缺省时,默认针对当前用户
查看计划任务
- crontab -l -u 用户名
删除计划任务
- crontab -r -u 用户名
1. crontab任务配置的格式
字段 | 说明 |
---|---|
分钟 | 取值为从0到59之间的任意整数 |
小时 | 取值为从0到23之间的任意整数 |
日期 | 取值为从1到31之间的任意整数 |
月份 | 取值为从1到12之间的任意整数 |
星期 | 取值为从0到7之间的任意整数,0或7代表星期日 |
命令 | 要执行的命令或程序脚本——绝对路径来表示 |
绝对路径:/usr/bin/ls来表示 |
2. 时间数值的特殊表示方法
* | 表示该范围内的任意时间 |
---|---|
, | 表示间隔的多个不连续时间点 |
- | 表示一个连续的时间范围 |
/ | 指定间隔的时间频率 |
举例:
- 0 17 * * 1-5 ------------------------表示为:每周一到周五的17:00
- 30 8 * * 1,3,5 ------------------表示为:每周1,3,5的8:30
- 0 8-18/2 * * * --------------------------表示为:8-18点 每2小时
- 0 * */3 * *--------------------------------表示为:每3天
- */1 * * * * ---------------------------------表示为:每分钟执行一次
- */5 * * * * ---------------------------------表示为:每5分钟执行一次
- 0 /1 * * ----------------------------------表示为:每小时执行一次
- 0 7 * * * ----------------------------------表示为:每天7点执行一次
- 0 0 * * * ----------------------------------表示为:每天执行一次
- 0 0 * * 1-----------------------------------表示为:每周执行一次
- 0 0 1 * *------------------------------------表示为:每月执行一次
- 0 0 1 1 * ------------------------------------表示为:每年执行一次
- 5 * * * *---------------------------------------表示为:每小时的第五分钟执行一次
- 30 7 8 * * ------------------------------------表示为:每个月的8号7:30执行一次
- 30 5 6 8 * -------------------------------------表示为:每年8月6号的5:30执行一次
- 30 6 * * 0---------------------------------------表示为:每个星期天的6:30 执行一次
- 30 3 10,20 * * --------------------------表示为:每个月的10号20号的3:30执行一次
- 25 8-11 * * * ----------------------------------表示为:每天的8点到11点 25分执行一次
- */15 * * * * -----------------------------------------表示为:每15分钟执行一次
- 30 6 */10 * * ----------------------------------表示为:每个月每隔10天 6:30分执行一次
echo '30 7 * * 6 /usr/bin/systemctl httpd restart '>> /var/spool/cron/root
- 输出语句,每个星期6的7:30
- systemctl:绝对路径
- /var/spool/cron/root :为用户自定义的文件设置
- 只有root 用户每个星期6的7:30执行usr/bin/systemctl httpd restart 重启服务命令
-
>:把输出的内容,输出到文件当中,如果文件中有内容,则会**覆盖**
-
>> :把输出的内容,输出到文件中,如果文件中有内容,**不会覆盖**,在文件末尾行 添加 echo '30 7 * * 6 /usr/bin/systemctl httpd restart ' 内容