Linux进程和计划任务管理

本文详细介绍了Linux系统中查看和管理进程的各种方法,包括使用ps、top、pgrep和pstree命令查看进程信息,以及如何启动、控制和结束进程。此外,还讲解了如何通过at和crontab设置一次性及周期性计划任务,以实现自动化执行任务。
摘要由CSDN通过智能技术生成


前言

程序和进程的关系

程序(有一个固定的路径)——二进制文件
保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
进程
在CPU及内存中运行的程序代码
动态执行的代码
父、子进程(一个程序可以创建一个或多个进程)
每个程序可以创建一个或多个进程

区别:进程是动态的,程序是静态的
在这里插入图片描述

查看进程

查看静态的进程统计信息

ps命令是linux系统中最常用的进程查看工具
通过不同的命令选项,可以有选择性地查看进程信息
a:显示当前终端下所有进程信息
u:是用以用户为主的格式输出进程信息
x:显示当前用户在所有终端下的进程信息
-e:显示系统内的所有进程信息
-l: 使用长格式显示进程信息
-f:使用完整的格式显示进程信息
-o:指定输出字段
固定用法1 ps aux 以简单列表的形式显示静态进程信息

[root@yzq ~]# ps aux | head -2 
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193944  6032 ?        Ss   16:15   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

USER: 启动该进程的用户账号信息
PID: 该进程在系统中的数字ID号,在当前系统中是唯一的(进程号)
%CPU:CPU占用的百分比
%MEM:内存占用的百分比
VSZ:占用虚拟内存(SWAP)的大小
RSS:占用常驻内存(物理内存)的大小
TTY: 表明该进程在哪个终端上运行。“?”表示未知或者不需要终端
SATA: 显示了进程当前的状态,如S(休眠,可被唤醒),R(运行),Z(僵死),<(高优先级),N(低优先级),s(表示进程是控制进程的,子进程),+(前台进程),l(多线性进程),D(不可休眠进程)T停止状态
START: 启动该进程的时间
TIME: 该进程占用CPU时间
COMMAND: 启动该进程的命令的名称
固定用法2 ps -elf 以长格式显示系统中的静态进程信息

[root@yzq /]# ps -elf | head -2
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 48486 ep_pol 11:45 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

PPID:表示对应进程的父进程的PID号
PRI:用户态优先级
NI: nice值,内核态优先级,取值范围(-20~19),值越小,优先级越高
ADDR:若是 - ,代表正在运行
SZ:在swap交换分区的容量
WCHAN:当前进程在内核中的名称
STIME:启动时间

查看进程动态信息

top

top命令会在当前终端以全屏交互式的界面进程排名,默认每三秒刷新一次

[root@yzq~]# top | head -n  8
top - 14:21:46 up  7:00,  4 users,  load average: 0.00, 0.01, 0.05
Tasks: 210 total,   1 running, 209 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.6 us,  0.0 sy,  0.0 ni, 98.4 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3861280 total,  2339976 free,   606588 used,   914716 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2985524 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                         
     1 root      20   0  199608   4500   2664 S   0.0  0.1   0:03.15 systemd   

第1行是任务队列信息

14:21:46 系统当前时间
up 7:00 系统运行时间
4 users 当前登录用户数
load average: 0.00, 0.01, 0.05 系统(cpu)负载,即任务队列的平均长度。 三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值(或可能是未来趋势)

第2行是系统任务信息

total 总进程数
running 正在运行的进程数
sleeping 休眠的进程数
stopped 中止的进程数
zombie 僵死无响应的进程数

第3行是CPU占用信息

us 用户占用
sy 内核占用
ni(nice) 优先级调度占用
id 空闲cpu
wa I/O等待占用
hi 硬件中断占用
si 软件中断占用
st 虚拟化占用

第4行是内存(mem)占用信息

total 总内存空间
free 空闲内存
used 已用内存
buff/cache 用作内核缓存的内存量

第5行是交换空间(swap)占用信息

total 总交换空间
free 空闲交换空间
used 已用交换空间
avail mem 代表可用于进程下一次分配的物理内存数量
top中快捷键
默认3s刷新一次,按s修改刷新时间,按空格立即刷新
P 键:根据CPU使用百分比大小进行排序
M 键:根据驻留内存大小进行排序
N 键:根据启动时间进行排序
c 键:切换显示命令名称和完整命令行
T键:按时间排序
p键:进程ip,查看某个进程状态
u/U键:指定显示的用户
h 键:可以获得 top程序的在线帮助信息
k 键:根据提示输入指定进程的 PID 号并按 Enter 键终止对应的进程
q 键:退出 top 程序
数字1 键:显示CPU个数和状态

pgrep查询进程信息

pgrep命令是用来查询特定进程信息的专用工具
-l 输出对应的进程名和PID号,若不加则只显示PID
-U 查询特定用户的进程
-t查询在特定终端运行的进程

[root@yzq ~]# pgrep -l vim
17504 vim
[root@yzq ~]# pgrep  vim
17504

pstree以树形结构列出进程信息

pstree命令可以输出Linux系统中各进程的树形结构,更加直观地判断出各进程之间的相互关系
-a:显示完整信息
-u:列出对应用户名
-p:列出对应PID号
pstree -aup 用户名

[root@yzq ~]# which pstree
/usr/bin/pstree
[root@yzq ~]# pstree -aup | grep sshd
  |-sshd,6869 -D
  |   |-sshd,17225    
  |   |       |-grep,17589 --color=auto sshd
  |   `-sshd,17458    

控制进程

启动进程

手工启动进程

由用户手工输入命令或者可执行程序的路径,可以至少启动一个进程
前台启动:用户数输入命令,直接执行程序
后台启动:在命令行尾加入“&”符号

[root@yzq ~]# systemctl stop firewalld

改变进程的运行方式

将进程放到后台运行

[root@yzq ~]# tail -f /var/log/messages &

&:把程序放到后台运行

jobs命令

查看处于后台的任务列表
常用参数
-l:可以同时显示该进程对应的PID号

[root@yzq ~]# jobs -l
[1]+ 17718 运行中               tail -f /var/log/messages &

kill命令

结束进程

kill -9 【进程号】
-9强制终止进程(强制终止可能会导致部分数据丢失)

[root@yzq ~]# jobs -l
[1]- 17718 运行中               tail -f /var/log/messages &
[2]+ 17803 运行中               nohup tar zcf usr.tar.gz /usr/ &
[root@yzq ~]# kill -9 17803
[root@yzq ~]# jobs -l
[1]- 17718 运行中               tail -f /var/log/messages &
[2]+ 17803 已杀死               nohup tar zcf usr.tar.gz /usr/

kill

在这里插入图片描述

ctrl+c命令中断任务

中断正在进行的命令

pkill命令终止进程

pkill命令可以根据进程的名称运行该进程的用户、进程所在的终端等多种属性终止特定的进程,大部分选项与pgrep命令类似
-u指定用户
-t指定终端
若终止一名用户的进程

[root@yzq ~]# pgrep -l -u "lisi"
17694 bash
17736 vim
[root@yzq ~]# pkill -9 -u "lisi"
[root@yzq ~]# pgrep -l -u "lisi"

在这里插入图片描述

将后台的进程恢复运行

bg与fg、ctrl+z

使用bg(BackGround,后台)命令可以将后台中暂停执行(如按ctrl+z组合键挂起)的任务恢复运行,继续在后台执行操作;
使用fg命令(ForceGround,前台)命令,可以将后台任务重新恢复到前台运行
除非后台运行的任务只有一个,否则bg和fg命令都需要指定后台进程的任务编号作为参数。

[root@yzq ~]# jobs -l
[1]- 17718 运行中               tail -f /var/log/messages 
[root@yzq ~]# fg 1
tail -f /var/log/messages
^Z
[1]+  已停止               tail -f /var/log/messages
[root@yzq ~]# bg
[1]+ tail -f /var/log/messages &

组合使用命令,先用fg将任务放在前台,此时用ctrl+z将任务挂起停止,然后用bg恢复运行

调度启动进程

通过指定任务运行时间来执行任务,调度启动的计划任务进程均在后台运行
使用at命令,设置一次性计划任务
使用crontab命令,设置周期性计划任务

计划任务管理

在Linux中用户除了即时执行命令外还可以在指定时间、指定日期执行预先计划的管理任务(定期备份,定期监控数据),通过atd和crond实现一次性、周期性计划任务

at一次性计划任务

at命令计划任务只能在指定时间点执行一次,计划任务时间需在系统时间后
at命令依次指定计划执行的时间、日期为参数
只指定时间表示当天时间,只指定日期表示该日期当前时间,确认后进入带有“at>”提示符的任务编辑页面
at命令使用顺序:查看时间–>设置时间–>输入命令–>Ctrl + D提交任务
在这里插入图片描述
atq对已经设置但还未执行的计划任务查询
atrm删除计划任务

[root@yzq ~]# at 09:40
at> reboot
at> <EOT>
job 8 at Tue Jul 12 09:40:00 2022
[root@yzq ~]# atq
8	Tue Jul 12 09:40:00 2022 a root
[root@yzq ~]# atrm 8
[root@yzq ~]# atq
[root@yzq ~]# 

crontab周期性任务

使用crontab命令设置的计划任务可以按预设的周期重复执行
按照预先设置的时间周期(分钟、小时、天…)重复执行用户指定的命令操作

属于周期性计划任务

主要设置文件

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

crontab:守护进程会自动检查/etc/crontab文件,/etc/cron.d目录,及/var/spool/cron目录中的改变,如果发现配置有更改,他们就会被载入内存,所以当某个crontab文件改变后并不需要重新启动crond守护进程就可以设置生效

/etc/crontab–系统任务配置文件

/etc/crontab文件中设置的是维护Linux操作系统所需的任务
cat /etc/crontab可以查看/etc/crontab文件的具体内容

[root@yzq ~]# cat /etc/crontab 
SHELL=/bin/bash
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/cron.*/----系统默认设置cron任务的配置文件存放目录
[root@yzq ~]# ls -l /etc/cron.
cron.d/       cron.deny     cron.monthly/ 
cron.daily/   cron.hourly/  cron.weekly/  

在这里插入图片描述

/var/spool/cron/----用户cron任务的配置文件存放目录
[root@yzq cron]# ll -a /var/spool/cron
总用量 0
drwx------.  2 root root   6 4月  11 2018 .
drwxr-xr-x. 12 root root 140 6月  29 00:33 ..

使用crontab命令管理用户的计划任务

编辑计划任务表
crontab -e [-u 用户名]
进入编辑命令用绝对路径写命令(不知道命令路径使用which查看)

[root@yzq cron]# which echo
/usr/bin/echo
[root@yzq cron]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

在这里插入图片描述
查看计划任务
crontab -l 【-u 用户名】

[root@yzq cron]# crontab -l
* * * * * /usr/bin/echo "123456" >> /opt/ky21.txt

删除计划任务
crontab -r【-u 用户名】

[root@yzq cron]# crontab -r
[root@yzq cron]# crontab -l
no crontab for root

crontab任务配置格式
          • user-name command to be executed
            字段 说明
            分钟 取值为0~59之前的任意整数
            小时 取值为0~23之间任意整数
            日期 取值为1~31之间任意整数
            月份 取值为0~12之间任意整数
            星期 取值为0~7之间任意整数,其中0/7代表周日
            run_command 需要执行的命令或程序脚本
时间数值的特殊表示方法

数值 说明
1 * 表示该范围内的任意时间
2 , 表示间隔多个不连续的时间点
3 - 表示一个连续的时间范围
4 / 指定间隔的时间频率
示例
0 17 * * 1-5 周一到周五每天17:00
30 8 * * 1,3,5 每周一、三、五的8点30分
0 8-18/2 * * * 8点到18点之间没2小时
0 * */3 * * 每3天

每年的三月的星期二晚上的10点每3分钟
*/3 22 * 3 2
每年三月份的星期二,如果是3号-5号,则每天晚上的10点的每3分钟
*/ 22 3-5 3 2

crond权限设置

默认所有用户都可以使用crontab创建自己的计划任务,root用户可以使用/etc/cron.deny文件来管理crond任务计划使用权限
禁止用户创建计划任务

[root@yzq cron]# vim /etc/cron.deny    ##编辑此文件,名字前不能有空格,一行一个用户名

zhangsan
~             

只允许该用户创建计划任务
[root@yzq cron]# vim /etc/cron.allow   ## 该文件默认不存在,直接输入就可以,无法tab补全

lisi

总结

查看进程的方式有ps、top、pgrep、pstree
其中ps查看静态统计信息的参数aux和elf的区别不大,但是elf可以查询到更明细的父子进程

进程的启动可以以通过手工启动和调度启动,但是手工启动过于麻烦,比较倾向于调度启动(方便)

控制进程的方式有很多,比如前后台(bg,pg)的调度,进程的管理
了解kill、killall、pkill的区别

通过计划任务来进行管理虚拟机需要执行的操作,可以是一次性或周期性的操作管理(crontab)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值