欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进程及计划任务管理

程序员文章站 2024-03-20 11:33:40
...

进程管理和计划任务管理

查看进程 :静态,动态

控制进程 :按条件结束进程,结束所有进程

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周报

下一篇: 学习周报