进程管理
在Linux中,每隔执行的程序都称为一个进程,每个进程都分配一个id号(pid,进程号)。
进程一般有两种类型,前台与后台。
前台进程就是用户在屏幕上可以操作的。
后台进程则是实际在执行,但屏幕上看不到的进程,通常使用后台方式执行。
一般系统服务都是以后台进程的方式存在,而且都会常驻在系统中。直到系统关闭。
显示系统执行的进程
ps命令是用来查看系统中,有哪些正在执行的进程,以及他们执行的状况。可以不加任何参数。
sh
ps -a // 显示当前终端的所有进程信息
ps -u // 以用户的格式显示进程信息
ps -x // 显示后台进程运行的参数
执行 ps -aux 后,显示如下
ps指令详解
- 指令ps -aux | grep xxx 可以查看具体某一个服务的进程,比如要查看sshd服务,可以执行
sh
ps -aux | grep sshd
- 指令说明:
-
System V展示风格
-
USER:用户名称
-
PID:进程号
-
%CPU:进程占用cpu的百分比
-
%MEM:进程占用物理内存的百分比
-
VSZ:进程占用虚拟内存大小(单位KB)
-
RSS:进程占用物理内存大小(单位KB)
-
TTY:终端名称,缩写
-
STAT:进程状态(S-睡眠;s-表示该进程是会话的先导进程;N-表示该进程拥有比普通进程的优先级更低,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等)
-
STARTED:进程的启动时间
-
TIME:进程使用cpu的总时间
-
COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
// 以全格式显示当前所有进程,查看进程的父进程
ps -ef // 以全格式显示当前所有进程
-e // 显示所有进程
-f // 全格式
-
终止进程kill和killall
sh
kill [选项] 【进程号】 // 通过进程号杀死进程
常用选项: -9 :强迫进程立即停止
killall 进程名称 // 通过进程名称杀死进程,其子进程也会被杀死,支持通配符,在系统负载过大而变得很慢时很有用
// 案例1:踢掉某个非法登录用户
kill 【进程号】
// 终止远程登录服务sshd,在适当的时候再次重启sshd服务
ps -aux | grep sshd // 先查询sshd的进程号10748
kill 10748
/bin/systemctl start sshd.service // 启动sshd服务
//终止多个gedit
killall gredit
//强制杀掉一个终端
kill -9 [进程号]
查看进程树pstree
sh
pstree [选项] // 更加直观的查看进程信息
常用选项:-p:显示进程的pid;
-u:显示进程的所属用户
// 案例1 树状显示进程的pid
pstree -p
// 树状显示进程的用户id
pstree -u
服务(service)管理
服务的本质就是进程,但是运行在后台,通常会监听某个端口,等待其他程序的请求,比如(MySQLld、sshd、防火墙等),因此又称为守护进程!
service管理指令
sh
service 【服务名】 【start|stop|restart|reload|status】
在CentOS7.0后,很多服务不再使用service,而是systemctl
service指令管理的服务在/etc/init.d查看
sh
ll /etc/init.d/
怎么查看服务名?
-
方式1:使用setup命令 ->选择【系统服务】 就可以看到全部的服务。
-
方式2: /etc/init.d 看到service指令管理的服务。
服务的运行级别(runlevel)
Linux有7种运行级别(常用的是级别3和5):
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
- 运行级别2:多用户状态(没有NFS),不支持网络
- 运行级别3:完全的多用户状态(有NFS),无界面,登录后进入控制台命令行模式
- 运行级别4:系统未使用,保留
- 运行级别5:X11控制台,登录后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
开机流程如下:
在centos7中,在/etc/inittab文件中。进行了简化,如下:
multi-user.target:analogous to runlevel 3
graphical.target:analogous to runlevel 5
查看当前默认运行级别指令:
sh
systemctl get-default
设置默认运行级别指令:
sh
systemctl set-default TARHET.target
chkconfig指令
chkconfig指令可以给服务的各个运行级别设置自启动 / 关闭
chkconfig指令管理的服务在/etc/init.d 查看
CentOS7.0之后,很多服务使用systemctl管理
chkconfig指令的基本语法:
sh
chkconfig --list [| grep xxx] // 查看服务
chkconfig 【服务名】 --list
chkconfig --level 5 【服务名】 on/off // 设置服务在运行级别5 自启动或关闭
chkconfig重新设置服务自启动/关闭后,需要重启系统。
systemctl管理指令
- systemctl管理指令
sh
systemctl [start|stop|restart|status] 【服务名】
systemctl指令管理的服务在/usr/lib/system 查看
- systemctl设置服务的自启动状态
sh
// 查看服务开机启动状态,grep 可以进行过滤
systemctl list-unit-files [| grep 服务名]
// 设置服务开机启动
systemctl enable 【服务名】
// 关闭服务开机启动
systemctl disable [服务名]
// 查询某个服务是否是自启动
systemctl is-enabled [服务名]
// 查询防火墙服务当前状态
systemctl status firewalld
// 开启防火墙
systemctl start firewalld
关闭或者启动防火墙后立即生效
这种方式只是临时生效,当重启系统后,还是回归以前服务的设置
要想永久生效,要使用
sh
systemctl 【enable/disable】 【服务名】
防火墙打开/关闭指定端口
在实际生产 环境中,往往需要设置防火墙打开或关闭指定端口,具体的指令如下:
sh
// 打开端口
firewall-cmd --permanent --add-port=[端口号/协议]
// 关闭端口
firewall-cmd --permanent --remove-port=[端口号/协议]
// 重新载入才能生效
firewall-cmd --reload
// 查询端口是否开放
firewall-cmd --query--port=[端口号/协议]
// 开放111端口
firewall-cmd --permanent --add-port=11/tcp
firewall-cmd --reload
动态监控进程top
top和ps命令很相似,都是用来显示正在执行的进程。top和ps最大的不同之处在于top在执行一段时间后可以更新正在运行的进程。
sh
top 【选项】
常用选项有:
-d 秒数 // 指定top命令每隔几秒更新,默认是3秒
-i // 使top不显示任何闲置或者僵死进程
-p // 通过指定进程id来监控具体某个进程的状态
// 每隔5秒刷新进程状态
top -d 5
- 动态监控进程的交互操作(执行top指令后,输入如下按键)
输入top命令后,按回车键,查看执行的进程。
如何监控特定用户,比如监控tom用户?
输入top命令后,按回车键,然后输入'u',再输入用户名,然后按回车。
如何终止指定的进程?
输入top命令后,按回车键,然后输入'k',在输入要结束的进程id,然后按回车,然后输入信号量'9'。
监控网络状态netstat
sh
基本语法:netstat 【选项】
常用选项:-an // 按一定顺序排列输出
-p // 显示哪个进程在调用
// 查看服务名为sshd的服务信息
netstat -anp | grep sshd