作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
经过上一章Linux日志的讲解,我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令,主要从以下几个方面来讲解:一些系统操作,系统查看处理,Linux文本处理,逻辑判断,重定向,网络传输,服务启动,文件句柄等内容。通过这些操作,让你对Linux的操作更加得心应手,具体分成以下章节进行讲解:
Linux进阶命令-echo&date&alias
Linux进阶命令-top
Linux进阶命令-ps&kill(本章节)
Linux进阶命令-sort&wc
Linux进阶命令-sed&split
Linux进阶命令-awk&uniq
Linux进阶命令-逻辑或&逻辑与
Linux进阶命令-重定向
Linux进阶命令-scp
Linux进阶命令-rsync
Linux进阶命令-rsync-daemon
Linux进阶命令-nohup&screen
Linux进阶命令-lsof
Linux进阶命令-小结
上一小节,我们讲了top里面可用看到进程信息,如果服务器是一个正在使用的业务服务器,那么业务进程就可能很多,top只能看到整体情况,如果我要看某些具体的进程应该怎么办呢?
PS
ps
命令是用于报告当前系统的进程状态。以下是它的详细介绍:
一、基本功能
它能够提供关于运行在系统中的进程的大量信息,例如进程的 ID、进程所属的用户、进程的 CPU 和内存使用情况等。
二、常用选项
ps -ef
-
e
选项代表显示系统内的所有进程信息。 -
f
选项用于产生完整的格式输出。 -
这个组合可以列出非常详细的进程信息,包括进程的 UID(用户 ID)、PID(进程 ID)、PPID(父进程 ID)、C(进程使用的 CPU 时间百分比)、STIME(进程启动时间)、TTY(进程相关的终端设备)、TIME(进程使用的 CPU 时间总和)以及 CMD(启动进程的命令名称)等。例如:
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Aug14 ? 00:00:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Aug14 ? 00:00:00 [kthreadd]
root 4 2 0 Aug14 ? 00:00:00 [kworker/0:0
ps aux
-
a
选项表示显示所有与终端相关或无关的进程。 -
u
选项用于显示进程的详细用户信息。 -
x
选项显示没有控制终端的进程。 -
此命令会显示更详细的信息,包括 USER(进程所有者的用户名)、PID、%CPU(进程占用的 CPU 百分比)、%MEM(进程占用的内存百分比)、VSZ(进程使用的虚拟内存大小,单位为 KB)、RSS(进程使用的物理内存大小,单位为 KB)、STAT(进程的状态,如 R 表示运行中,S 表示睡眠,D 表示不可中断的睡眠等)、START(进程的启动时间)、TIME(进程累计使用的 CPU 时间)、COMMAND(启动进程的命令)等。
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 125460 3976 ? Ss Aug14 0:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Aug14 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< Aug14 0:00 [kworker/0:0H]
三、用途
-
监控系统进程:
-
管理员可以通过
ps
命令随时了解系统中正在运行的进程情况,以便及时发现异常进程,如占用过多 CPU 或内存的进程。 -
例如,如果发现某个未知进程占用了大量 CPU 资源,可以进一步调查该进程的来源和用途,判断是否是恶意程序或存在程序错误。
-
-
查找特定进程:
-
当需要查找某个特定程序的进程 ID 以便进行操作(如终止进程)时,可以使用
ps
命令。 -
比如,要查找名为
firefox
的浏览器进程,可以使用ps aux | grep firefox
,它会列出所有包含firefox
关键字的进程信息,然后可以根据 PID 进行进一步操作。
-
-
分析系统性能:
-
通过观察进程的 CPU 和内存使用情况,可以分析系统性能瓶颈。
-
如果多个进程都出现高 CPU 使用率,可能意味着系统负载过高,需要考虑升级硬件或优化程序。如果某些进程的内存使用不断增长且不释放,可能存在内存泄漏问题,需要对相关程序进行检查和修复。
-
kill
在上面的命令,其实我们已经看到了关于进程的说明,那么我们怎么可以关掉一个进程呢?
kill
命令用于终止正在运行的进程。在Linux和Unix系统中,每个进程都有一个唯一的进程ID(PID),kill
命令通过指定进程ID来向指定进程发送信号,以达到终止进程的目的。
基本语法
kill [options] PID
-
PID
:要终止的进程的进程ID。 -
options
:可选参数,用于指定发送的信号类型或控制行为。
常用选项
-
-9
或--kill
:发送强制终止信号(SIGKILL),立即终止目标进程。这是一种强制的终止方式,但可能会导致未保存数据丢失。
kill -9 PID
-
-15
或--terminate
:发送终止信号(SIGTERM),请求目标进程优雅地退出。通常情况下,进程可以捕获这个信号并执行清理操作后自行退出。
kill -15 PID
#默认啥都不加就等于是15
kill PID
-
-l
:列出所有可用的信号名称。
kill -l
信号类型
-
SIGTERM(15):默认发送的终止信号,通常用于请求进程正常退出。
-
SIGKILL(9):强制终止信号,立即终止进程,无法被阻塞或忽略。
示例
-
终止进程ID为 1234 的进程:
kill 1234
#或者kill -15 1234
-
强制终止进程ID为 5678 的进程:
kill -9 5678
使用场景
-
结束僵尸进程: 僵尸进程是已经终止但其父进程未能正确处理终止状态的进程。可以使用
kill
命令将僵尸父进程终止并清理掉。 -
关闭异常进程: 当某个进程消耗过多资源或者表现异常时,可以使用
kill
命令终止它,以恢复系统的正常运行。 -
进程管理: 在系统管理和运维中,
kill
命令是管理进程生命周期的重要工具,能够有效地管理和控制进程的行为。
前面提到了进程和父进程,这里甚至还有没有提到的子进程,我们举个例子来说明它。
[root@localhost ~]# ps -ef |grep nginx
root 15027 1 0 13:28 ? 00:00:00 nginx: master process /usr/sbin/nginx
nginx 15028 15027 0 13:28 ? 00:00:00 nginx: worker process
nginx 15029 15027 0 13:28 ? 00:00:00 nginx: worker process
1.15027进程编号是nginx的master进程或者说主进程,它的父进程是1号进程,这个1号进程理解就是操作系统(普通的业务进程的父进程都应该是1号进程)。
2.15028和15029进程编号是就是nginx的work进程,它的父进程就是nginx的master进程,反之他们就是15027的子进程。
总结
1.ps 命令讲到的2个常用参数实际上是两种操作习惯或者风格,99%的的问题使用他们是没有区别的。
2.无论是哪个用法,他们都会显示所有的进程,我们基本上都需要通过我们前面在Linux-搜索命令(二)的grep来进行过滤,过滤的选项可以是进程名字,也可用启动命令等。
3.kill命令主要作用是杀死进程,其实还有个选项,-2 这个需要应用程序支持这个信号才可以支持,它才可以最优雅关闭进程。
4.kill虽然可以一次杀死多个进程(kill pid1 pid2 pid3 ...),但是其实还有一个pkill的命令可以杀死一类进程,可以提高效率。
5.其实还有部分进程是无法通过kill -9 杀死的,在Linux里面叫不可中断睡眠进程,这个有机会后面再讲。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。