进程及计划任务管理
进程管理和计划任务管理
查看进程 :静态,动态
控制进程 :按条件结束进程,结束所有进程
at 一次性任务设置 :只执行一次
crontab 周期性任务设置 :循环性的,比如每周五执行一次
程序
- 保存在硬盘、光盘等介质中的可执行代码和数据
- 静态保存的代码
不会因为关机数据丢失,数据是保存在硬盘上的
进程
- 在CPU 及内存中运行的程序代码
- 动态执行的代码
- 父、子进程
- 每个进程可以创建一个或多个进程
应用程序:一个应用程序可以包含一个或多个进程
进程:一个进程包含一个或多个线程
线程:线程是执行操作的最小单元
例如:
应用程序=工厂
进程=车间
线程=工人
高并发处理依赖于多线程操作
查看进程信息
ps命令:查看静态的进程统计信息
方法一:
[aaa@qq.com ~]# ps aux
a 系统当前的所有进程
u 指定用户
x 该用户在所有终端下的进程
一列,称为字段或者属性
PID 进程号 进程的唯一身份标识,有且仅有一个
cpu 占用率
mem 内存占用率
vsz 虚拟内存
rss 物理内存
TTY 终端
? 代表未知 本地加载的基本都是未知
STAT 当前进程状态
- R 代表运行中
- S 代表可中断休眠进程
- D 代表不可中断休眠进程
- s 代表父进程
- < 代表高优先级
- N 代表低优先级
- Z 僵尸进程
- l 代表多线性进程
- 前台进程
START 启动时间
TIME 进程占用CPU的总时间
COMMAND 名称
方法二:
[aaa@qq.com ~]#ps -elf
PID 进程号
PPID 当前进程父进程状态*
PRI 用户态优先级,人为控制
NI 内核态优先级,NIce值(-20~19,值越小,优先级越大)
ADDR -代表正在运行
SZ 代表虚拟内存 交换分区
WCHAN 当前进程的内核名称
top命令
- 查看动态的进程排名信息
[aaa@qq.com ~]# top
top - 15:12:21 up 2:22, 7 users, load average: 0.00, 0.01, 0.05
Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 11.8 sy, 0.0 ni, 88.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867024 total, 68648 free, 1308412 used, 489964 buff/cache
KiB Swap: 4194300 total, 4158092 free, 36208 used. 321576 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
54848 root 20 0 157860 2192 1488 R 5.6 0.1 0:00.03 top
1 root 20 0 128164 4776 2672 S 0.0 0.3 0:02.64 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.88 ksoftirqd/0
……………………省略部分内容
在查看动态进程时:按
c cpu由大到小排序
M 内存由大到小排序
q 退出动态进程
pgrep命令
- 根据特定条件查询进程PID信息
[aaa@qq.com ~]# pgrep -l "log" //模糊匹配,只要包含log都会显示出来
281 xfs-log/sda2
488 xfs-log/sda1
489 xfs-log/sda5
575 rsyslogd
581 abrt-watch-log
622 systemd-logind
[aaa@qq.com ~]# pgrep -l -U ml "volume" //指定用户匹配volume
52100 gvfs-mtp-volume
52137 gvfs-afc-volume
52148 gvfs-goa-volume
-U 指定特定用户
-l 长格式显示进程名
-t 指的是终端
pstree命令
- 以树形结构列出进程信息
pstree -aup
-a 显示完整信息
-u 列出对应用户名
-p 列出对应PID号
init,1 代表初始化的进程
[aaa@qq.com ~]# pstree -aup //列出所有进程信息
systemd,1 --switched-root --system --deserialize 21
├─ModemManager,578
│ ├─{ModemManager},600
│ └─{ModemManager},614
├─NetworkManager,706 --no-daemon
│ ├─dhclient,17013 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf...
│ ├─{NetworkManager},710
│ └─{NetworkManager},712
…………省略部分内容
[aaa@qq.com ~]# pstree -ap ml //列出用户ml所有信息
at-spi-bus-laun,53506
├─dbus-daemon,53511 --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3
│ └─{dbus-daemon},53512
├─{at-spi-bus-laun},53507
├─{at-spi-bus-laun},53508
├─{at-spi-bus-laun},53509
└─{at-spi-bus-laun},53510
…………省略部分内容
[aaa@qq.com ~]# pstree -ap ml //注销用户后再次输入命令
未发现进程。 //所有进程关闭了
手工启动
- 前台启动:用户输入命令,直接执行程序
- 后台启动:在命令行尾加入“&”符号
例如:
[aaa@qq.com dev]# mount /dev/sr0 /mnt/ //挂载
mount: /dev/sr0 写保护,将以只读方式挂载
[aaa@qq.com dev]# cd /mnt
[aaa@qq.com mnt]# ls
CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7
EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL
[aaa@qq.com mnt]# cp -r /mnt/Packages /opt //复制安装包到opt目录下(属于前台)
^C //在此复制期间,无法操作其他命令,crtl+c终断
[aaa@qq.com mnt]# cd /opt
[aaa@qq.com opt]# ls
Packages rh
[aaa@qq.com opt]# cd Packages //进入,查看到已经复制了一部分
[aaa@qq.com Packages]# ls
389-ds-base-1.3.6.1-16.el7.x86_64.rpm autocorr-pt-5.0.6.2-14.el7.noarch.rpm
389-ds-base-libs-1.3.6.1-16.el7.x86_64.rpm autocorr-ro-5.0.6.2-14.el7.noarch.rpm
abattis-cantarell-fonts-0.0.25-1.el7.noarch.rpm autocorr-ru-5.0.6.2-14.el7.noarch.rpm
abrt-2.1.11-48.el7.centos.x86_64.rpm autocorr-sk-5.0.6.2-14.el7.noarch.rpm
abrt-addon-ccpp-2.1.11-48.el7.centos.x86_64.rpm autocorr-sl-5.0.6.2-14.el7.noarch.rpm
abrt-addon-kerneloops-2.1.11-48.el7.centos.x86_64.rpm autocorr-sr-5.0.6.2-14.el7.noarch.rpm
abrt-addon-pstoreoops-2.1.11-48.el7.centos.x86_64.rpm autocorr-sv-5.0.6.2-14.el7.noarch.rpm
[aaa@qq.com opt]# cp -r /mnt/Packages /opt & //在命令后面使用&符号,可在后台运行复制,前台可继续操作
[1] 55099 *输出信息中包括后台任务的序号、PID号*
[aaa@qq.com opt]#
调度启动
进程的前后台调度:
ctrl +z 组合键:将当前进程挂机,即调入后台并停止执行
ctrl +c 组这件:中断正在执行的命令
jobs命令:查看处于后台的任务列表
fg命令:将后台进程恢复到前台运行,可指定任务序号
[aaa@qq.com ~]# vim abc1.txt & //后台创建abc1.txt
[1] 55925 //后台序号1 PID:55925
[aaa@qq.com ~]# jobs -l
[1]+ 55925 停止 (tty 输出) vim abc1.txt //停止状态
[aaa@qq.com ~]# vim abc2.txt & //后台创建abc1.txt
[2] 55934 //后台序号2 PID:55934
[aaa@qq.com ~]# jobs -l //查看后台任务列表
[1]- 55925 停止 (tty 输出) vim abc1.txt
[2]+ 55934 停止 (tty 输出) vim abc2.txt
[aaa@qq.com ~]# killall -9 vim //强制杀死vim的所有进程
[1]- 已杀死 vim abc1.txt
[2]+ 已杀死 vim abc2.txt
[aaa@qq.com ~]# jobs -l //查看后台任务列表
[aaa@qq.com ~]# fg 1
-bash: fg: 1: 无此任务
[aaa@qq.com ~]# fg 2
-bash: fg: 2: 无此任务
终止进程
- kill用于终止指定的PID号的进程
- killall用于终止指定名称的所有进程
- -9 选项用户强制终止
pkill命令**(重要)
- 根据特定条件终止相应的进程
- 常用命令选项
- -U:根据进程所属的用户名终止相应的进程
- -t:根据进程所在的终端终止相应进程
管理员可以对用户进行终止进程
普通用户不可以对管理员进行终止进程,但可以查看进程
[aaa@qq.com ~]# pgrep -l -U "ml" //查询ml用户PID信息
53307 gnome-keyring-d
53329 gnome-session-b
53337 dbus-launch
………… 省略部分内容…………
[aaa@qq.com ~]# who //查询后台登陆用户
root :1 2019-10-29 13:39 (:1)
root pts/0 2019-10-31 10:57 (:1)
root pts/2 2019-11-12 13:19 (192.168.17.1)
ml :2 2019-11-12 14:27 (:2)
[aaa@qq.com ~]# pkill -9 -U ml //强行终止ml用户的进程
[aaa@qq.com ~]# who //查询后台登陆用户,已经没有ml用户了
root :1 2019-10-29 13:39 (:1)
root pts/0 2019-10-31 10:57 (:1)
root pts/2 2019-11-12 13:19 (192.168.17.1)
计划任务管理
- 使用at命令,设置一次性计划任务
- 使用crontab命令,设置周期性计划任务
at命令
- 一次性计划任务
at [HH:MM] [yyyy-mm-dd] //格式
1、date 获取当前时间
2、设置时间
3、 at< 进入子模式输入命令 wc -l 统计行数
4、ctrl+d 提交任务
atq 查看准备执行的任务列表
atrm 删除指定编号的at任务
[aaa@qq.com ~]# date //获取当前时间
2019年 11月 12日 星期二 18:35:00 CST
[aaa@qq.com ~]# at 18:38 2019-11-12 //在18:38 2019-11-12
at> ps aux | wc -l > /opt/123.txt //输入要执行的命令
at> <EOT> //按ctrl+d提交任务
job 1 at Tue Nov 12 18:38:00 2019
对于已经设置但还未执行(未到时间点)的计划任务,可以通过atq命令进行查询,但已经执行过的at任务将不会再出现在列表中
[aaa@qq.com ~]# atq //查看准备执行的任务列表
1 Tue Nov 12 18:38:00 2019 a root
[aaa@qq.com ~]# date //获取当前时间
2019年 11月 12日 星期二 18:39:04 CST
[aaa@qq.com ~]# atq //查看准备执行的任务列表
[aaa@qq.com ~]# cat /opt/123.txt //查看是否由被执行成功
192
若要删除指定编号的at任务,可以使用atrm命令。删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中。但已经执行过的任务无法删除。
[aaa@qq.com ~]# at 21:00 2019-11-12 //在21:00 2019-11-12
at> shutdown -h now //输入要执行的命令
at> <EOT> //按ctrl+d提交任务
job 2 at Tue Nov 12 21:00:00 2019
[aaa@qq.com ~]# atq //查看准备执行的任务列表
2 Tue Nov 12 21:00:00 2019 a root
[aaa@qq.com ~]# atrm 2 //删除第2条at计划任务
[aaa@qq.com ~]# atq //确认第2条任务已被删除
crontab命令
- 按照预先设置的时间周期(分钟、时、日、月、周)重复执行用户指定的命令操作
- 属于周期性计划任务
- 主要设置文件和目录
- 全局配置文件,位于文件:/etc/crontab
- 系统默认的设置,位于目录:/etc/cron.*/
- 用户定义的设置,位于文件:/var/spool/cron/用户名
crontab的配置文件和目录
1)/etc/crontab ——系统任务配置文件
/etc/crontab文件中设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户手动修改此文件。例如,该文件中包括了设置Shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。
[aaa@qq.com ~]# cat /etc/crontab
SHELL=/bin/bash //设置执行计划任务的Shell环境
PATH=/sbin:/bin:/usr/sbin:/usr/bin //定义可只能怪命令及程序的路径
MAILTO=root //将任务输出信息发送到指定用户的邮箱
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
//根据“/etc/crontab”配置文件中的设定,crond将按照不同的周期重复执行相应目录中的任务脚本文件
2)/etc/cron.*/ ——系统默认设置cron任务的配置文件存放目录
3)/var/spool/cron/ ——用户cron任务的配置文件存放目录
由用户自行设置(使用crontab命令)的cron计划任务将被保存到目录/var/spool/cron/中。当用户使用crontab命令创建计划任务,就会在/var/spool/cron/目录下生成一个与用户名相同的文件。例如,root用户的cron计划任务保存在配置文件/var/spool/cron/root中。
[aaa@qq.com ~]# ls -l /var/spool/cron/*
-rw-------. 1 root root 44 11月 12 20:12 /var/spool/cron/root
crond守护进程会自动检查/etc/crontab文件、/etc/cron.*/目录及/var/spool/cron/ 目录中的改变,如果发现有配置更改,他们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动crond守护进程就可以使设置生效
周期性计划任务配置
分时日月周
时间数值的特殊表示方法:
- “ * ”:表示该范围内的任意时间
- 逗号“,”:表示间隔的多个不连续时间点,如“3,4, 6, 8”
- 减号“ - ”:表示一个连续的时间范围,如“1-4"表示整数1、2、3、4。
- 斜杠“ / ”: 指定间隔的时间频率,如在日期字段中的“ */3 ”表示每隔3天。
示例:
0 17 * * 1-5 周一到周五每天17:00
0 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18/2 * * * 8点到18点之间每2小时
0 * */3 * * 每3天
示例:
若要按固定的周期重复完成一些系统管理任务,任务内容如下:①每天早上7:50自动开启sshd服务,22:50关闭sshd服务;②每隔五天清空一次FTP服务器公共目录“/var/ftp/pub”中的数据;③每周六的7:30重新启动系统中的httpd服务;④ 每周一、周三、周五的下午17:30,使用tar命令自动备份“/etc/httpd”目录。以上任务可由root用户通过crontab设置以下计划完成。
[aaa@qq.com 〜]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 0 */5 * * /bin/nn -rf/var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar jcf httpdconf.tar.bz2 /etc/httpd/
管理cron计划任务
-u 指定用户
- 编辑计划任务
crontab -e [-u 用户名]
- 查看计划任务
crontab -l [-u 用户名]
- 删除计划任务
crontab -r [-u 用户名]
[aaa@qq.com ~]# crontab -e //编辑计划任务进入编辑页面
no crontab for root - using an empty one
crontab: installing new crontab
[aaa@qq.com ~]# crontab -l //输入完成wq保存,查看计划任务
15 20 12 11 * /usr/bin/cp -r /home/ml /opt/
[aaa@qq.com ~]# ls /home
ml
[aaa@qq.com ~]# ls /opt //查看opt目录下 ml家目录已经复制了
123.txt ml Packages rh
[aaa@qq.com ~]# crontab -r //清空计划任务
在设置crontab计划任务过程中,每一条记录只能运行一条命令,当只需要删除某一条计划任务时,可以通过“crontab -e”进行编辑,删除;而若要清空所有的计划任务时,可以使用“crontab -r”命令。
学习总结
- 查看进程的命令(ps、top、pgrep、pstree)
-
进程控制
- 启动进程
- 调度进程(Ctrl+Z组合键、jobs、bg、fg)
- 终止进程(kill、killall、pkill)
- at命令设置计划任务
- crontab计划任务的配置字段
上一篇: 20201026周报
下一篇: 学习周报
推荐阅读
-
进程及计划任务管理
-
Linux内核的进程管理 博客分类: Linux c/c++Linux kernel linux多进程系统编程内核
-
Linux下进程管理利器—supervise(监控并将死掉的程序重启) 博客分类: 分布式,高并发,大型互联网,负载均衡操作系统 监控
-
使用npm管理weex组件及公共模块库
-
进程简介及相关API
-
PHP用户管理中常用接口调用实例及解析(含源码)
-
php出租房数据管理及搜索页面
-
已知端口号,查看进程信息及关闭进程(命令行) 博客分类: 应用 端口进程命令行
-
资源管理器C:\Windows\explorer.exe命令行参数及在c# aps.net core中的调用(打开文件夹)
-
asp.net 计划任务管理程序实现,多线程任务加载