Linux系统中的进程与计划任务管理

程序、进程、线程概述

程序:港、台译做电脑程式。计算机程序是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具。
进程:是计算机中的程序关于du某数据集合上的一次运行活动,是系统进行资源分配zhi和调度的基本单位,是操dao作系统结构的基础。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。

进程管理内容

查看进程信息

ps命令:查看静态的进程统计信息

方法一:

[root@localhost ~]# ps aux

a 系统当前的所有进程

u 指定用户

x 该用户在所有终端下的进程
在这里插入图片描述
第一列,称为字段或者属性

PID 进程号 进程的唯一身份标识,有且仅有一个

cpu 占用率

mem 内存占用率

vsz 虚拟内存

扫描二维码关注公众号,回复: 11458939 查看本文章

rss 物理内存

TTY 终端

? 代表未知 本地加载的基本都是未知

STAT 当前进程状态

R 代表运行中
S 代表可中断休眠进程
D 代表不可中断休眠进程
s 代表父进程
< 代表高优先级
N 代表低优先级
Z 僵尸进程
l代表多线性进程
前台进程

START 启动时间

TIME 进程占用CPU的总时间

COMMAND 名称
方法二:

[root@localhost ~]#ps -elf

PID 进程号

PPID 当前进程父进程状态*

PRI 用户态优先级,人为控制

NI 内核态优先级,NIce值(-20~19,值越小,优先级越大)

ADDR -代表正在运行

SZ 代表虚拟内存 交换分区

WCHAN 当前进程的内核名称

top命令

查看动态的进程排名信息

在查看动态进程时:按

c cpu由大到小排序

M 内存由大到小排序

q 退出动态进程
在这里插入图片描述

[root@localhost ~]# 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 
     
     ……………………省略部分内容

pgrep命令

-U 指定特定用户

-l 长格式显示进程名

-t 指的是终端

根据特定条件查询进程PID信息
[root@localhost ~]# 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
[root@localhost ~]# pgrep -l -U ml "volume"   //指定用户匹配volume
52100 gvfs-mtp-volume
52137 gvfs-afc-volume
52148 gvfs-goa-volume

pstree命令

以树形结构列出进程信息

pstree  -aup

-a 显示完整信息

-u 列出对应用户名

-p 列出对应PID号

init,1 代表初始化的进程
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzIxOTgxOA==,size_16,color_FFFFFF,t_70)

[root@localhost ~]# 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
…………省略部分内容

[root@localhost ~]# 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
…………省略部分内容  

[root@localhost ~]# pstree  -ap ml  //注销用户后再次输入命令
未发现进程。                          //所有进程关闭了

手工启动

前台启动:用户输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号

例如:

[root@localhost dev]# mount /dev/sr0 /mnt/          //挂载
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost dev]# cd /mnt                     
[root@localhost 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
[root@localhost mnt]# cp -r /mnt/Packages /opt        //复制安装包到opt目录下(属于前台)
^C                                             //在此复制期间,无法操作其他命令,crtl+c终断
[root@localhost mnt]# cd /opt           
[root@localhost opt]# ls          
Packages  rh
[root@localhost opt]# cd Packages          //进入,查看到已经复制了一部分
[root@localhost 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

[root@localhost opt]# cp -r /mnt/Packages /opt &  //在命令后面使用&符号,可在后台运行复制,前台可继续操作
[1] 55099            *输出信息中包括后台任务的序号、PID号*
[root@localhost opt]# 

调度启动

进程的前后台调度:

ctrl +z 组合键:将当前进程挂机,即调入后台并停止执行

ctrl +c 组这件:中断正在执行的命令

jobs命令:查看处于后台的任务列表

fg命令:将后台进程恢复到前台运行,可指定任务序号
在这里插入图片描述

[root@localhost ~]# vim abc1.txt &          //后台创建abc1.txt
[1] 55925                                   //后台序号1   PID:55925
[root@localhost ~]# jobs -l        
[1]+ 55925 停止 (tty 输出)     vim abc1.txt      //停止状态
[root@localhost ~]# vim abc2.txt &         //后台创建abc1.txt
[2] 55934                                 //后台序号2   PID:55934
[root@localhost ~]# jobs -l                //查看后台任务列表
[1]- 55925 停止 (tty 输出)     vim abc1.txt
[2]+ 55934 停止 (tty 输出)     vim abc2.txt
[root@localhost ~]# killall -9 vim              //强制杀死vim的所有进程
[1]-  已杀死               vim abc1.txt
[2]+  已杀死               vim abc2.txt
[root@localhost ~]# jobs -l                  //查看后台任务列表
[root@localhost ~]# fg 1
-bash: fg: 1: 无此任务
[root@localhost ~]# fg 2
-bash: fg: 2: 无此任务

终止进程

kill用于终止指定的PID号的进程

killall用于终止指定名称的所有进程

-9 选项用户强制终止

pkill命令**(重要)

根据特定条件终止相应的进程

常用命令选项
-U:根据进程所属的用户名终止相应的进程
-t:根据进程所在的终端终止相应进程

管理员可以对用户进行终止进程
普通用户不可以对管理员进行终止进程,但可以查看进程

[root@localhost ~]# pgrep -l -U "ml"    //查询ml用户PID信息
53307 gnome-keyring-d
53329 gnome-session-b
53337 dbus-launch
………… 省略部分内容…………

[root@localhost ~]# 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)
[root@localhost ~]# pkill -9 -U ml       //强行终止ml用户的进程
[root@localhost ~]# 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命令

一次性计划任务
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务

at [HH:MM] [yyyy-mm-dd]           //格式

1、date 获取当前时间

2、设置时间

3、 at< 进入子模式输入命令 wc -l 统计行数

4、ctrl+d 提交任务

atq 查看准备执行的任务列表

atrm 删除指定编号的at任务

[root@localhost ~]# date             //获取当前时间
2019年 11月 12日 星期二 18:35:00 CST
[root@localhost ~]# 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任务将不会再出现在列表中

[root@localhost ~]# atq               //查看准备执行的任务列表
1	Tue Nov 12 18:38:00 2019 a root    
[root@localhost ~]# date             //获取当前时间
2019年 11月 12日 星期二 18:39:04 CST
[root@localhost ~]# atq             //查看准备执行的任务列表
[root@localhost ~]# cat /opt/123.txt    //查看是否由被执行成功
192

若要删除指定编号的at任务,可以使用atrm命令。删除后的at任务将不会被执行,并且不会显示在atq命令的显示结果中。但已经执行过的任务无法删除。

[root@localhost ~]# 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
[root@localhost ~]# atq               //查看准备执行的任务列表
2	Tue Nov 12 21:00:00 2019 a root 
[root@localhost ~]# atrm 2         //删除第2条at计划任务
[root@localhost ~]# atq              //确认第2条任务已被删除

crontab命令

按照预先设置的时间周期(分钟、时、日、月、周)重复执行用户指定的命令操作

属于周期性计划任务

主要设置文件和目录:
全局配置文件,位于文件:/etc/crontab
系统默认的设置,位于目录:/etc/cron.*/
用户定义的设置,位于文件:/var/spool/cron/用户名

crontab的配置文件和目录

1)/etc/crontab ——系统任务配置文件

/etc/crontab文件中设置的是维护Linux系统所需的任务,由Linux系统及相关程序在安装时自动设置,不建议用户手动修改此文件。例如,该文件中包括了设置Shell环境、可执行路径等变量的操作,以及每小时、每天、每周、每月需要执行的任务目录。

[root@localhost ~]# 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中。

[root@localhost ~]# 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设置以下计划完成。

[root@kgc 〜]# 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 用户名]  ###删除计划任务
[root@localhost ~]# crontab -e       //编辑计划任务进入编辑页面
no crontab for root - using an empty one
crontab: installing new crontab
[root@localhost ~]# crontab -l      //输入完成wq保存,查看计划任务
15 20 12 11 * /usr/bin/cp -r /home/ml /opt/
[root@localhost ~]# ls /home
ml
[root@localhost ~]# ls /opt         //查看opt目录下 ml家目录已经复制了
123.txt  ml  Packages  rh

[root@localhost ~]# crontab -r      //清空计划任务

在设置crontab计划任务过程中,每一条记录只能运行一条命令,当只需要删除某一条计划任务时,可以通过“crontab -e”进行编辑,删除;而若要清空所有的计划任务时,可以使用“crontab -r”命令。

总结

●查看进程的命令(ps、top、pgrep、pstree)

●进程控制

启动进程
调度进程(Ctrl+Z组合键、jobs、bg、fg)
终止进程(kill、killall、pkill)

●at命令设置一次性计划任务

●crontab命令可以设置周期性计划任务

●crontab计划任务的配置字段,依次为分钟、小时、日期、月份、星期

猜你喜欢

转载自blog.csdn.net/weixin_47219818/article/details/107091006