Linux进程管理
进程管理
基本概念介绍
进程和线程
进程: 一个在内存中运行的应用程序,每一个进程都有自己独立的一块内存空间,并被分配一个ID号(PID),在Windows下可以打开任务管理器查看当前进程。一个进程至少有一个线程,也可以有多个线程。
线程: 进程中的一个执行任务,负责当前任务中程序的执行,一个进程可以运行多个线程,多个线程可以共享数据。
前台和后台
前台进程是当前桌面可以进行操作的,后台进程不在屏幕上显示,一般来说系统服务程序都是在后台执行的
显示系统进程
ps命令
ps -aux 显示终端所有进程信息并以用户格式输出同时显示后台进程运行的参数
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写.
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- STARTED:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
ps -ef 以全格式显示当前所有进程,可以通过该指令查看父子进程
终止进程
当一个进程占据过多资源时,可以使用指令来终止进程。或者终止僵尸进程,
僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程
- kill [选项] 进程号 可以进程号来种植进程,可以用 -9 来强行终止进程
- killall 进程名称
查看进程树
基本语法: pstree [选项] 以树状形式显示当前的进程
选项:
- -p:显示进程的PID
- -u:显示进程所属的用户
服务管理
服务(service)是运行在后台的进程,通常会监听某个端口,等待其它程序的请求。比如(数据库,sshd,防火墙等待),服务进程又成为守护继进程。
servie指令
语法:service 服务名 [stop|start|restart|reload|status]
说明:在CentOS7.0以后许多服务不再用service管理而是使用systemctl,可以在 /etc/init.d 下查看service管理的指令,主要管理的是network服务
查看服务名
执行命令 setup 可以进入查看所有服务的界面,并且可以设置开机自启动等等
systemctl指令
语法:systemctl 服务名 [stop|start|restart|reload|status]
说明:在 /usr/lib/systemd/system 下查看systemctl管理的指令
设置开机启动状态
- systemctl list-unit-files[|grep服务名] 查看服务开机启动状态,grep可以进行过滤
- systemctl enable服务名(设置服务开机启动)
- systemctl disable服务名(关闭服务开机启动)
- systemctl is-enabled 服务名(查询某个服务是否是自启动的)
注意:一些指令属于开机自启动,如果此时stop了该服务进程,开机后会自动重启,因此如果需要永久关闭某个进程,必须要关闭服务开机启动
防火墙
在真正的生产环境中,由于防火墙的存在,我们请求数据包不能跟服务器监听端口通讯,所以需要打开特定的端口,通过firewall指令来实现。
netstat指令
netstat指令可以查看进程对应的端口号和tcp协议
netstat -anp | more
firewall指令
- 打开端口:firewall-cmd--permanent--add-port=端口号/协议
- 关闭端口:firewall-cmd--permanent--remove-port=端口号/协议
- 重新载入,才能生效:firewall-cmd--reload
- 查询端口是否开放:firewall-cmd--query-port=端口/协议
telnet
在Windows下可以使用telnet IP 端口号测试是否连上服务器监听端口
telnet 192.168.200.130 111
注意:Win10的telnet功能是关闭的,可以在控制面板->程序->程序和功能->启用和关闭Windows功能,找到Telnet客户端,打开即可。
示例:打开111端口
#先进行telnet测试,不能连接(Win)
telnet 192.168.200.130 111 #先进行telnet测试,不能连接(Win)
#开放111端口(Linux)
firewall-cmd--permanent--add-port=111/tcp
#再reload一下(Linux)
firewall-cmd--reload
#查看端口是否打开
firewall-cmd--query-port=111/tcp #yes,端口已经打开
#再telnet测试,发现能通过
#再关闭端口
firewall-cmd--permanent--remov-port=111/tcp;
#再reload一下(Linux)
firewall-cmd--reload
动态监控进程
由于进程是实时变化的,如果我们需要动态的监控进程可以使用 top 指令
语法:top [选项]
选项 | 功能 |
---|---|
-d 秒数 | 指定每隔多少秒更新,默认3秒 |
-i | 不显示僵死进程 |
-p | 指定监控进程ID来仅仅监控某个进程的状态 |
可以使用交互操作来更改top的显示方式,注意大小写 | |
操作 | 功能 |
-- | -- |
P | 按照CPU使用率来排序 |
M | 以内存使用率来排序 |
N | 按照PID来排序 |
u | 按下u,再输入用户名可以监控该用户 |
k | 按下k,再输入进程号就可以杀死对应的经常 |
q | 退出 |
学习总结来源于韩顺平老师一周学会Linux