Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux进程管理

Linux实操篇之进程管理详解

作者:贼爱学习的小黄

文章介绍了Windows和Linux中进程管理的相关知识,包括如何打开任务管理器、进程的父进程、进程树等法、服务管理等法(如service、chkconfig和systemctl)以及动态监控(如top和netstat)等内容

进程

进程这个东西相信大家都有接触过,我们那Windows举例,小伙伴们平时打游戏的时候有没有遇到黑屏的情况,反正小黄以前的电脑不太好,有时候进游戏就黑屏显示不起来了,这时候相信大家都跟小黄一样选择打开任务管理器(这也是小黄人生中记得第一个快捷键CTRL+ALT+数字点)Windows中的任务管理器是这样的,显示了占用CPU等信息。

Linux中的进程

我们先来说说在Linux下如何打开我们所谓的任务管理器吧

ps -aux
-a: 显示当前终端的所有进程信息
-u: 以用户的格式显示进程信息
-x: 显示后台进程运行的参数
# 查看所有信息有点长,建议使用more
ps -aux  | more

接下来我们一一介绍每一列显示信息的含义

父子进程

这个概念应该非常好理解,我们来看一下Linux中如何查看进程的父进程

我们通过一个应用实例来学习:以全格式显示当前所有的进程,查看sshd的父进程信息

sshd就是我们远端连接服务器的一个命令

我们还是先来看一下各列描述着什么样一个信息

我们通过管道符就可以看到sshd的父进程ID为1

终止进程

Windows上的终止进程就是任务管理器打开,右键结束任务,就可以把我们卡死的游戏给关掉啦。而Linux我们需要通过指令来终止进程,杀死这个进程

kill [选项] 进程号
killall 进程名称
-9 表示强迫进程立即停止

查看进程树

树形结构往往可以让我们更直观的查看信息

pstree [选项]
-p:显示进程的PID
-u:显示进程的所属用户

服务管理

服务本质还是一个进程,但是是在后台运行的,通常都会监听某一个端口,等待其他程序的请求,因此我们又称之为守护进程。

service管理指令

在centos7后,很多服务不再使用service,而是使用sysytemctl,我们先来看一下service还可以对哪些服务起作用

# 使用ls -l /etc/init.d/ 查看可以作用于哪些服务
[root@yellowstarEdu01 ~]# ls -l /etc/init.d/
总用量 40
-rw-r--r--. 1 root root 18281 8月  24 2018 functions
-rwxr-xr-x. 1 root root  4569 8月  24 2018 netconsole
-rwxr-xr-x. 1 root root  7923 8月  24 2018 network
-rw-r--r--. 1 root root  1160 10月 31 2018 README

我们就使用network这个服务来学习一下service指令,network是一个网络指令,通常情况下network是开启状态的

# service network status  查看当前网络状态
[root@yellowstarEdu01 ~]# service network status
已配置设备:
lo ens33
当前活跃设备:
lo ens33 virbr0
# service network stop  关闭网络(在虚拟系统演示,关闭网络之后远程连接将断开)
[root@yellowstarEdu01 ~]$ service network stop
Stopping network (via systemctl): 
# service network start  开启网络
[root@yellowstarEdu01 ~]$ service network start
Starting network (via systemctl):
# service network restart 重启网络

chkconfig指令

通过chkconfig命令,可以给服务的各个运行级别设置自启动/关闭

查看服务

自启动/关闭相当于开机启动或不启动,我们通过以下命令可以查看服务的状态

在network中我们可以看到在运行级别3,5的状态下都设置了开机启动网络服务

[root@yellowstarEdu01 ~]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关

设置开机是否启动

例如我们想对network服务,设置运行级别为3时,不开机启动网络服务,可以使用以下命令

注意:chkconfig重新设置服务自启动或关闭,需要重启虚拟机reboot命令

[root@yellowstarEdu01 ~]# chkconfig --level 3 network off
[root@yellowstarEdu01 ~]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:关    4:开    5:开    6:关

systemctl管理指令

systemctl指令管理的服务在 /usr/lib/systemd/system查看

[root@yellowstarEdu01 ~]# ls -l  /usr/lib/systemd/system

查看服务的自启动状态,以防火墙举例

[root@yellowstarEdu01 ~]# systemctl list-unit-files | grep firewall
firewalld.service                             enabled 

开启、关闭防火墙

# systemctl disable firewalld 关闭防火墙开机启动
# systemctl enable firewalld 开启防火墙开启启动
[root@yellowstarEdu01 ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@yellowstarEdu01 ~]# systemctl list-unit-files | grep firewall
firewalld.service                             disabled

查看防火墙是否自启动

[root@yellowstarEdu01 ~]# systemctl is-enabled firewalld
disabled

firewall指令

在真正的生产环境中,我们不可能把防火墙关闭了,往往需要将防火墙打开,但是如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口进行通讯。

这时候我们需要打开指定的端口,例如80,22,8080等

# firewall-cmd --permanent --add-port=端口/协议		打开端口
# firewall-cmd --permanent --remove-port=端口/协议		关闭端口
[root@yellowstarEdu01 ~]# firewall-cmd --permanent --add-port=111/tcp
success
# firewall-cmd --reload 重新载入才能生效
[root@yellowstarEdu01 ~]# firewall-cmd --reload
success
# firewall-cmd --query-port=端口/协议	查看端口是否开放
[root@yellowstarEdu01 ~]# firewall-cmd --query-port=111/tcp
yes

这时候有小伙伴就要问了,怎么查看端口对应的协议呢?只需使用以下指令即可

看111端口最前面的proto就是协议

[root@yellowstarEdu01 ~]# netstat -nap | more
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:25672           0.0.0.0:*               LISTEN      7421/beam.smp       
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:6000            0.0.0.0:*               LISTEN      7581/X              
tcp        0      0 0.0.0.0:4369            0.0.0.0:*               LISTEN      7992/epmd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      7927/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      7426/sshd           

动态监控系统

top命令,与ps命令类似,都用来显示正在执行的进程,区别是top可以在执行一段时间更新正在运行的进程

基本语法

# top [选项]
-d 秒数 :指定top命令每隔几秒更新一次,不指定默认为3秒
-i top不显示任何闲置或僵死进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态

来看看top命令显示的一些信息

交互操作

P : 以CPU使用率排序,默认就是此项
M : 以内存使用率排序
N : 以PID排序
q : 退出top

# 监视特定用户
先输入u,再输入用户名
# 终止指定的进程
先输入k,在输入要结束的进程ID

监控网络状态

基本语法

netstat [选项]
-an # 按一定顺序排列输出
-p # 显示哪个进程在调用

查看服务名为sshd的服务的信息

netstat -anp | grep sshd

我们看倒数第二行,是root用户登录的进程并且是已连接,这里虚拟机中的22端口映射着我们主机的42701端口,只有两个台机子端口互相开放,才能建立连接。

如果我们退出root用户,这个进程不会立即回到监听状态,而是转为TIME_WAIT等待状态,持续几分钟,如果一直没有重新连接,就关闭该进程

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文