引言
在Linux 中,每个执行的程序(代码)都成为一个进程,Linux 为每一个进程分配了一个唯一的 id 号 - PID。
每个进程都会对应一个父进程,而这个父进程可以复制多个子进程,例如 www 服务器。
每个进程都可能以两种方式存在 - 前台/ 后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常运行在管理员无法感知的后台。
一般系统服务都是以后台进程的形式存在,比如 sshd 服务进程,其中的 d 代表 daemon (守护进程),而且会常驻在系统中,如果不进行特殊操作,一般只有在关机时才会终止。
一、显示系统中的进程列表
基本语法:
ps -aux
一般使用 ps 指令都会带上参数,-a 代表 all 所有进程;-u 代表 user 以用户格式显示;-x 代表显示后台进程运行参数。
字段详解:
USER - 进程的用户名
PID - 进程 ID
%CPU - 占用 CPU 百分比
%MEM - 占用物理内存百分比
VSZ - 使用的虚拟内存大小(单位:KB)
RSS - 使用的物理内存大小(单位:KB)
TTY - 终端名称,缩写
STAT - 进程状态,S - 睡眠,s - 表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或被停止。
START - 进程启动时间
TIME - 进程占用 CPU 总时间
COMMAND - 进程执行时的命令行,过长的话可能会截断显示
另外,ps -aux 还可以通过管道符和过滤命令 “| grep 进程名” 来专门查找指定进程的详情信息:
可以看到上面的途中,查看ssh 进程的信息,显示结果中,第一行是 sshd 后台进程,因为它在启动时使用了 /usr/sbin/sshd 命令。而最后一行可以看到使用的是 grep ssh ,也就是我们正在查询时开启的一个进程。第二和第三行是通过外部的 ssh 终端设备连接进来而开启的后台进程,第四行则是一个 sftp 相关的后台进程。
有趣的是,如果我通过 kill -9 杀掉 3362 进程,那么远程终端的文件视图就会连接中断,同时第四行的 sftp 后台进程也会终止:
终端命令行依然可以操作,由此可见进程列表中显示的信息与实际的进程情况完全匹配。
二、查看父进程
还有一种查询进程的方式是:
ps -ef
这句指令的意思是“全格式显示所有进程,包括父进程”。一般也会配合 管道符 “|” 和 筛选指令 grep 、分页指令 more 等一起使用。
PPID 就是父进程的 PID 。
C 代表CPU 用于计算执行优先级的因子。数值越大,表名进程是 CPU 密集型运算,执行优先级会降低;数值越小,表名进程是 IO 密集型运算,执行优先级会提高。
STIME 进程启动的时间
TTY 终端名称
TIME CPU 占用时间
CMD 启动进程所用的命令和参数
三、终止进程
基本语法:
kill 参数 进程PID
常用参数: -9。
Linux 中的 kill 指令用来终止指定进程的运行。
通常,终止一个前台进程只需要 Ctrl + C ,但是对于一个后台进程就需要使用 kill 指令,并且要先查看我们想要终止进程的 PID。
我们来使用 man kill 来查看一下 kill 的使用手册:
在描述中的第一段话意思是这样的:
指令 kill 发送特定的信号给特定的进程或进程组。如果没有指定信号,那么就会发送 TERM 信号。TERM 信号会杀死那些没有捕获这个信号的进程。对于其他的进程,可能有必要使用 KILL(9) 信号,因为这个信号不会被捕获。
在 kill 说明中有一个参数 是 -l 可以列出所有的可发送信号:
因此,kill -9 的含义就是强制杀死进程。
四、服务管理
服务的本质其实就是进程,但是运行于后台,通常会监听某个端口,等待其他程序的请求,比如mysqld,sshd 防火墙等,因此我们又称为守护进程
4.1 service指令
在CentOS 7之前都是通过 service 指令来管理后台系统服务,CentOS7 之后,采用systemctl 指令来进行管理。这里讲解 service 的用法,后期会针对 CentOS 7 来进程补充。
基本语法:
service 服务名 start | stop | restart | reload | status
案例:查看Linux 防火墙的情况,关闭并重启防火墙:
可以在宿主机终端采用 telnet 指令来检查端口是否可以连接(国庆期间又装了一个 CentOS 6 ,ip 是200):
4.2 查看Linux自启动服务
在命令行输入 setup 指令并回车即可查看系统自启动服务:
服务名称前面的 [ ] 内如果有 * 号,说明此项服务属于开机自启。
除了这种方式,还可以通过/etc/init.d/服务名称 文件来查看:
不过在这里好像只能看到系统都有哪些服务。
4.3 服务的运行级别
在前面的文章中《Linux进阶之路————Linux运行级别》中,总结了关于Linux 系统运行级别的概念和知识,这里服务的运行级别也和之前的运行级别是一脉相承的。
首先我们知道,Linux 的启动流程是如下所示的:
服务的运行级别对应着系统的运行级别,如果系统当前的运行级别是3,那么5 运行级别的服务就不会开机启动,而需要手动操作。
通过 chkconfig 指令可以给每个服务的各个运行级别设置 自启动/ 关闭,设置之后即生效。
常用语法:
chkconfig --list | grep 服务名 # 查看服务的运行级别状态,过滤处理可选
chkconfig 服务名 --list # 查看某个服务的运行级别状态
chkconfig [--level 运行级别编号] 服务名 on | off # 在某个运行级别下开启或关闭自启动,若不写运行级别,默认全部
案例:关闭所有运行级别下的防火墙服务的自启动:
五、进程监控
Linux 使用 top 命令来进行进程监控。
top 命令和 ps 命令有些类似,它们都用来显示正在执行的进程,但二者又有不同,top 最大的特点在于可以定期刷新进程列表中的状态。
基本语法:
top [选项]
可选参数:
-d 秒数 指定top 命令刷新频率,默认是 3。
-i 不显示任何闲置或者僵死进程
-p PID 指定进程ID 的进程状态
当进入到 top 的交互模式中时,可以通过下面一些参数,来与 top 命令进行交互:
P 以CPU 使用率排序,默认是此项
M 以内存使用率排序
N 以 PID 排序
q 退出 top 命令
输入 top 命令可以显示上图中的信息,默认每 3 秒刷新一次,如果按下交互键,在排序的同时可以立即刷新列表。输入q 可以退出 top 。
上图中,up 代表系统启动了多久,2 users 表示当前用户数,load average 应该是平均负载的意思。其余的选项可以网上搜索或见名猜意 (* ̄︶ ̄)。
六、网络监控
6.1 netstat
网络监控采用 netstat 命令。
基本语法:
netstat [选项]
常用参数:
-an 按一定排序输出
-p 显示哪个进程在调用
案例:查看sshd 的服务信息:
可以看到,如果sshd 服务是关闭的状态的话,那么 netstat 也查询不到 sshd 的网络监听状态。
6.2 ping
不论是Windows 还是 Linux ,这个命令都是通用的。它是一种检测网络的工具,可以快速查看远程主机是否可以连通,主机间的介质是否为断,网线是否脱落或网卡故障等。
如果两台主机之间可以正常通信,那么就会显示上图所示,如果通信异常,那么就不会显示时间等信息。
综上,就是关于系统服务相关的知识总结,欢迎文末留言。