Linux常用命令--进程管理
摘要
-
本文介绍Linux进程管理等相关命令
-
本文基于
CentOS8(x86_64)
ps :查看进程
1 | # 与top命令类似,可以查看进程信息 |
pstree :树状查看进行信息
1 | # 折叠展示,只展示父进程和子进程的数量 |
kill :终止进程
1 | # 正常关闭进程 |
进程的挂起和恢复
1 | ctrl+c :终止 |
进程运行优先级
-
进程优先级是 PRI(top中的PR),其表示程序被 CPU 执行的先后顺序,此值越小进程的优先级别越高
-
PRI 值不是 Nice 值,但是 Nice 值会影响优先级,
PRI(new) = PRI(old) + nice
,所以我们调整 Nice 值,就可以改变进程的优先级 -
linux下的进程调度优先级 Nice 是从 -20 到 19 ,一共 40 个级别,数字越大,表示进程的优先级越低。默认时候,进程的调度优先级是0。
1 | # 指定命令的运行优先级 |
at :执行一次的计划任务
-
/var/spool/at:at任务存放在该目录下
1 | # 启动at服务 |
-
用户限制:
/etc/at.allow
:如果文件存在,则只有此文件中列出的用户可以使用at命令
/etc/at.deny
:如果文件存在,则此文件中列出的用户不可以使用at命令
如果以上两个文件都不存在,则只有root用户可以使用at命令
如果以上两个文件都存在,但是都为空,则所有用户都可以使用at命令
crontab :周期性计划任务
-
systemctl start crond
:启动cron服务,默认启动 -
crontab -l
:显示当前用户下的计划任务 -
crontab -e
:编辑当前用户下的计划任务 -
/var/spool/cron
:计划任务保存在该路径下 -
/etc/cron.allow
与/etc/cron.deny
:用户限制,规则同at
-
格式:
分钟[0~59] 小时[0~23] 日期[1~31] 月份[1~12] 星期[0~6] commands
1 | # 每5分钟执行一次 |
systemctl :服务管理
-
centOS7以后使用
systemd
进行服务管理,其命令接口为systemctl
-
systemctl
兼容了service
,即systemctl
也会去/etc/init.d
目录下,查看、执行相关程序 -
如下centOS6及之前的服务启动方式,centOS7及之后仍然可以通过这种方式管理服务,实际上会重定向到systemctl命令
1 | service redis start |
-
systemd
的服务配置放在目录/usr/lib/systemd/system (Centos)
或/etc/systemd/system (Ubuntu)
-
配置目录下有多种类型文件
.mount
,.service
,.target
,.socket
,.timer
等等- 不同的文件类型代表不同的资源,统称为 Unit(单位),Unit 一共分成12种类型
1
2
3
4
5
6
7
8
9
10
11
12Service unit:系统服务
Target unit:多个 Unit 构成的一个组
Device Unit:硬件设备
Mount Unit:文件系统的挂载点
Automount Unit:自动挂载点
Path Unit:文件或路径
Scope Unit:不是由 Systemd 启动的外部进程
Slice Unit:进程组
Snapshot Unit:Systemd 快照,可以切回某个快照
Socket Unit:进程间通信的 socket
Swap Unit:swap 文件
Timer Unit:定时器- 重点学习
.service
文件,其定义了一个服务,分为[Unit],[Service],[Install]三个小节
1
2
3
4
5
6
7
8
9
10
11[Unit]
Description:描述,
After:在哪些服务启动后才启动
ConditionPathExists: 执行条件
[Service]
EnvironmentFile:变量所在文件
ExecStart: 执行启动脚本
Restart: fail时重启
[Install]
Alias:服务别名
WangtedBy: 多用户模式下需要的 -
查看服务
1 | # 列出当前已经加载启动的 unit,如果添加 -all 选项会同时列出没有启动的 unit |
-
service :系统服务
1 | # 启动redis服务 |
小贴士
1 | # 查看系统启动耗时 |
-
target :类似于运行级别,支持多个target同时启动。target其实是多个unit的组合,系统启动说白了就是启动多个unit
1 |
|
小贴士
- 1.
systemd
主配置文件/etc/systemd/system.conf
- 2.开机会先加载
/etc/systemd/system/default.target
- 3.所有的
service
和target
都在/usr/lib/systemd/system/
目录下 - 4.
/etc/systemd/system/defaut.target
是一个软连接,软连接到了/usr/lib/systemd/system/multi-user.target
,它会加载/usr/lib/systemd/system/multi-user.target.wants
下面的service
- 5.查看一个
service
属于哪个target
,需要查看具体的service文件,如:cat /usr/lib/systemd/system/sshd.service
,看里面[install]
部分
chkconfig :设置系统服务在哪些运行级别下开机启动
-
centOS7之后不再使用这种方式,而是使用
systemctl
,但是仍然可以在/etc/init.d
目录下创建管理脚本,然后通过chkconfig
进行管理
1 | chkconfig --list :查看全部系统服务的运行级别 |
ntsysv :通过界面设置服务是否开机启动
-
centOS7之后不再使用这种方式,而是使用
systemctl
,但是仍然可以使用其管理当前运行级别下的服务 -
运行命令后会弹出设置界面,服务前面有*号的表示开机启动,使用空格修改,Tab键进行跳转
1 | # 修改当前的运行级别下的服务 |
Linux运行级别
0:系统关机模式,系统默认运行级别不能设置为0,否则无法正常启动系统
1:单用户模式,也称为救援模式,root权限,用于系统维护,禁止远程登陆,类似Windows下的安全模式登录。
2:无网络支持的多用户模式
3:有网络支持的多用户模式(文本模式,工作中最常使用的模式)
4:保留,未使用
5:有网络支持的图形化模式,支持多用户模式,登陆后进入图形GUI模式或GNOME、KDE图形化界面,如X Window系统。
6:重启模式,重新引导系统,即重启
运行级别切换
1 | # 查看当前的运行级别,输出结果为: 上一次运行级别 当前运行级别 |
fuser :可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点、甚至网络端口,并给出程序进程的详细信息
-
fuser通常被用在诊断系统的
resource busy
问题,通常是在你希望umount
指定的挂载点得时候遇到
1 | # 查看哪个进程在访问/mnt目录 |
查看进程启动时的环境变量
-
所有启动的进程都会在
/proc/
下创建以其进程IP命名的文件夹,其下为与当前进程相关为文件,其中environ
中的没人就是进程启动时的环境变量,比如我们查看elasticsearch
的进程
1 | $ pgrep -f elasticsearch |