前言
程序和进程的关系
程序(有一个固定的路径)——二进制文件
保存在硬盘、光盘等介质中的可执行代码和数据
文件中静态保存的代码
进程
在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 需要执行的命令或程序脚本
- user-name command to be executed
-
-
-
时间数值的特殊表示方法
数值 说明
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)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/76569.html