Linux之进程管理
1、进程管理
概述
在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号)。
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
显示系统执行的进程
ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数。
ps显示的信息选项:
字段 说明 PID 进程识别号 TTY 终端机号 TIME 此进程所消CPU时间 %CPU 进程占用CPU的百分比 %MEM 进程占用物理内存的百分比 VSZ 进程占用的虚拟内存大小(单位:KB) RSS 进程占用的物理内存大小(单位:KB) STAT 进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等 START 进程的启动时间 COMMAND 启动进程所用的命令和参数,如果过长会被截断显示 USER 用户名称 ps参数说明:
参数 说明 ps -a 显示当前终端的所有进程信息 ps -u 以用户的格式显示进程信息 ps -x 显示后台进程运行的参数
应用实例
以全格式显示当前所有的进程,查看进程的父进程。
1
2-e显示所有进程,-f全格式
ps -ef查看sshd的父进程信息。
1
ps -ef |grep sshd
终止进程
若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。
1
2kill [选项] 进程号 # 功能描述:通过进程号杀死/终止进程,选项-9:表示强迫进程立即停止
killall 进程名称 # 通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用
查看进程树
1 | -p:显示进程的PID |
2、服务管理
概述
服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。
service管理指令
1 | 在CentOS7.0后很多服务不再使用service,而是systemctl |
service指令管理的服务在/etc/init.d查看:
使用service指令,查看,关闭,启动network(注意:在虚拟系统演示,因为网络连接会关闭)
1
2
3service network status
service network stop
service network start
查看服务名
第一种方式:使用setup–>系统服务就可以看到全部。
第二种方式:/etc/init.d看到service指令管理的服务。
1
ls -l /etc/init.d/
服务的运行级别(runlevel)
Linux系统有7种运行级别(runlevel):常用的是级别3和5。
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆。
- 运行级别2:多用户状态(没有NFS),不支持网络。
- 运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式。
- 运行级别4:系统未使用,保留。
- 运行级别5:X11控制台,登陆后进入图形GUI模式。
- 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。
开机的流程说明:
centos7后运行级别说明:
1
2
3multi-user.target:analogous to runlevel 3
graphical.target:analogous to runlevel 5
systemctl get-default1
2修改系统启动的运行级别
systemctl set-default TARGET.targetchkconfig指令:
通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭。
chkconfig指令管理的服务在/etc/init.d查看。
基本语法:
1
chkconfig --list [|grep xxx] # 查看服务
1
chkconfig 服务名 --list
1
chkconfig --level 5 服务名 on/off # 使某个服务再某个运行级别是自启动还是关闭
systemctl管理指令
基本语法:
1
systemctl [start|stop|restart|status] 服务名
systemctl指令管理的服务在/usr/lib/systemd/system查看:
systemctl设置服务的自启动状态:
1
2
3
4systemctl list-unit-files [|grep 服务名] # 查看服务开机启动状态,grep可以进行过滤)
systemctl enable 服务名 # 设置服务开机启动
systemctl disable 服务名 # 关闭服务开机启动
systemctl is-enabled 服务名 # 查询某个服务是否是自启动的查看当前防火墙的状况,关闭防火墙和重启防火墙。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28[root@centos7-01 ~]# systemctl list-unit-files |grep fire # 查看防火墙开机启动状态
firewalld.service enabled
[root@centos7-01 ~]# systemctl is-enabled firewalld # 查看防火墙是否自启动
enabled
[root@centos7-01 ~]# systemctl status firewalld # 查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2021-08-20 14:33:07 CST; 1h 28min ago
Docs: man:firewalld(1)
Main PID: 7007 (firewalld)
CGroup: /system.slice/firewalld.service
└─7007 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
8月 20 14:33:06 centos7-01 systemd[1]: Starting firewalld - dynamic firewall daemon...
8月 20 14:33:07 centos7-01 systemd[1]: Started firewalld - dynamic firewall daemon.
[root@centos7-01 ~]# systemctl stop firewalld # 关闭防火墙
[root@centos7-01 ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 五 2021-08-20 16:02:45 CST; 5s ago
Docs: man:firewalld(1)
Process: 7007 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 7007 (code=exited, status=0/SUCCESS)
8月 20 14:33:06 centos7-01 systemd[1]: Starting firewalld - dynamic firewall daemon...
8月 20 14:33:07 centos7-01 systemd[1]: Started firewalld - dynamic firewall daemon.
8月 20 16:02:44 centos7-01 systemd[1]: Stopping firewalld - dynamic firewall daemon...
8月 20 16:02:45 centos7-01 systemd[1]: Stopped firewalld - dynamic firewall daemon.上面关闭或者启用防火墙后,立即生效。但这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。如果希望设置某个服务自启动或关闭永久生效,要使用以下指令:
1
systemctl [enable|disable] 服务名
打开或者关闭指定端口:
1
2
3
4firewall-cmd --permanent --add-port=端口号/协议 # 打开端口
firewall-cmd --permanent --remove-port=端口号/协议 # 关闭端口
firewall-cmd --reload # 重新载入,才能生效
firewall-cmd --query-port=端口/协议 # 查询端口是否开放其中端口的协议可通过netstat命令查看:
1
2
3
4
5
6
7-a :all,表示列出所有的连接,服务监听,Socket资料
-t :tcp,列出tcp协议的服务
-u :udp,列出udp协议的服务
-n :port number, 用端口号来显示
-l :listening,列出当前监听服务
-p :program,列出服务程序的PID
netstat -[atunlp]
动态监控进程
top与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的的进程。
1
top [选项]
选项说明:
交互操作说明:
- 监视特定用户,比如监控Tom用户。
- top:输入此命令,按回车键,查看执行的进程。
- u:然后输入“u”回车,再输入用户名。
- 终止指定的进程,比如要结束Tom登录。
- top:输入此命令,按回车键,查看执行的进程。
- k:然后输入“k”回车,再输入要结束的进程ID号。
- 监视特定用户,比如监控Tom用户。
监控网络状态
查看系统网络情况netstat。
1
2
3
4
5
6
7-a :all,表示列出所有的连接,服务监听,Socket资料
-t :tcp,列出tcp协议的服务
-u :udp,列出udp协议的服务
-n :port number, 用端口号来显示
-l :listening,列出当前监听服务
-p :program,列出服务程序的PID
netstat [选项]