1.概念
(1)进程
进程是指一个具有独立功能的程序的一次运行过程,也是系统进行资源分配和调度的基本单位,即每个程序模块和它执行时所处理的数据组成了进程。进程虽不是程序,但由程序产生。进程与程序的区别在于:程序是一系列指令的集合,是静态的概念,而进程则是程序的一次运行过程,是动态的概念;程序可以长期保存,而进程只能暂时存在、动态地产生、变化和消亡。进程和程序并不是一一对应的,一个程序可以包含若干个进程,一个进程也可以调用多个程序。
解释:进程是动态的,程序是静态的,当程序运行时就会占用CPU内存空间来执行程序,执行的动态过程就是进程
(2)作业
正在执行的一个或多个相关进程可以形成一个作业。使用管道命令和重定向命令,一个作业可以启动多个进程。
根据作业的不同运行方式,可将作业分为两大类。
- 前台作业:运行于前台,用户可对其进行交互操作。
- 后台作业:运行于后台,不接受终端的输入,单向终端输出执行结果。
作业既可以在前台运行也可以在后台运行,但在同一时刻,每个用户只能有一个前台作业。
解释后台:后台是看不见的,就比如发QQ信息给别人,原理是发给服务器,再由服务器发给别人。但是后面的运行程序是人看不见的
2.进程的类型
- 交互式进程:这类进程是由用户直接控制的,如文本编辑器、终端会话等。它们需要频繁地与用户交互。
- 批处理进程:这类进程不需要用户交互,它们通常被提交到系统中,由操作系统的批处理系统自动执行,如打印作业。
- 守护进程(Daemon):在系统启动时启动,并在后台运行,执行系统级别的任务,如网络服务、打印队列管理、日志记录等。
守护进程
守护进程(Daemon)是一种在后台运行的特殊进程,通常没有控制终端,不会直接与用户交互。它们通常在系统启动时启动,并在系统关闭时终止。守护进程通常用于执行系统级别的任务,如网络服务、系统监控、日志记录等。
理解:守护进程就是在后台没有终端(可以理解为客户端)与他连接的进程,客户端想要和守护进程(服务)连接就必须连接服务的端口号。
步骤 1:启动守护进程并运行
在系统启动时,mysqld守护进程通常由系统的初始化脚本或服务管理器(如 systemd
或 init.d
)启动。
一旦 mysqld
守护进程启动并运行,它会执行以下操作:
- 初始化数据库:
mysqld
会初始化数据库文件和必要的系统表。 - 监听端口:
mysqld
守护进程会监听默认的 MySQL 端口(通常是 TCP 端口 3306),等待来自客户端的连接请求。 - 处理查询:当客户端(如 MySQL 命令行工具、应用程序等)发送查询请求时,
mysqld
会解析并执行这些查询,然后将结果返回给客户端。 - 维护数据完整性:
mysqld
负责维护数据库的数据完整性和安全性,包括处理事务、锁定、日志记录等。
步骤 2:守护进程日志记录
mysqld
守护进程会将运行时的信息记录到日志文件中,以供系统管理员查看。
- 错误日志:错误日志通常位于
/var/log/mysql/error.log
,记录了mysqld
的启动、运行、错误和警告信息。 - 查询日志:如果启用了查询日志,则所有发送到
mysqld
的查询都会被记录下来,通常位于/var/log/mysql/query.log
。
步骤 3:守护进程配置
mysqld
的配置通常通过以下文件进行:
- 主配置文件:通常位于
/etc/mysql/my.cnf
或/etc/my.cnf
,包含了mysqld
的主要配置选项,如端口号、数据目录位置、日志设置等。 - 服务器端配置:可以通过命令行参数或配置文件来设置
mysqld
的行为。
步骤 4:守护进程安全性
为了确保数据库的安全性,mysqld
守护进程在安装后会执行以下安全措施:
- 安全安装:安装过程中会提示用户设置 root 密码,并删除匿名用户和测试数据库。
- 访问控制:
mysqld
使用基于角色的访问控制(RBAC)来限制用户对数据库的访问。
守护进程的特性
以下是 mysqld
守护进程的一些关键特性:
- 无控制终端:
mysqld
在后台运行,不依赖于任何控制终端。 - 长期运行:
mysqld
设计为长期运行,只在系统维护或升级时重启。 - 系统服务:
mysqld
提供数据库服务,是许多应用程序依赖的核心服务。
通过这个例子,我们可以看到 mysqld
守护进程是如何在后台运行,并管理 MySQL 数据库服务的。它负责处理客户端的请求,维护数据完整性,并且可以由系统管理员通过命令行工具进行管理。
mysqld
守护进程会监听默认的 MySQL 端口(通常是 TCP 端口 3306),等待来自客户端的连接请求。只有正确输入端口号才能连接成功
3.查看进程信息
在Linux中,可以使用多种命令来查看和管理进程:
(1)ps:列出当前运行的进程
ps
(Process Status)是Linux和类Unix操作系统中用于查看当前运行进程的命令行工具。它提供了关于进程的详细信息,包括进程ID(PID)、父进程ID(PPID)、用户、CPU和内存使用情况等。
举例:查看当前用户的进程
ps
这个命令会显示当前用户会话中启动的进程。
举例2:查看所有进程
ps -A
或
ps aux
这两个命令都会列出系统上的所有进程。
举例3: 查看进程的详细信息
ps -ef
这个命令会以全格式列出所有进程,包括用户、PID、PPID、启动时间等。
在这个输出中:
UID
:运行该进程的用户ID。PID
:进程ID。PPID
:父进程ID。C
:CPU使用的百分比。STIME
:进程启动的时间。TTY
:进程启动的终端设备。TIME
:进程运行的总CPU时间。CMD
:启动进程的命令。
举例4:如果我们想要查看进程的树状结构,可以使用pstree
命令,但这不是ps
的选项:
pstree
ps
命令是一个非常灵活的工具,它有许多选项可以组合使用,以提供不同格式的输出和筛选进程的能力。在实际使用中,根据需要查看的信息不同,组合不同的选项是非常重要的。
举例5:pstree -p 显示进程号
举例6:pstree -u显示用户
(2)top:实时显示系统进程的动态。
top
是一个在Linux和Unix系统中广泛使用的性能监控工具。它提供了实时的系统概览,包括进程、CPU使用情况、内存使用情况、交换空间、负载等关键系统信息。top
命令的输出是动态更新的,默认情况下,每隔3秒刷新一次。
- 用法:top [选项]
交互模式
启动 top
后,你会进入一个交互式界面,其中你可以执行以下操作:
- 按下
h
显示帮助菜单。 - 按下
k
杀死一个进程。 - 按下 q 退出
top
。 - 按下
1
显示所有CPU的信息。 - 按下 M 按内存使用量排序。
- 按下
P
按CPU使用量排序。 - 按下N 按以PID排序
下面是对这个输出各部分的解释:
-
04:14:21 up 2:03, 2 users, load average: 0.00, 0.03, 0.05:(最上面部分)
- 当前时间:04:14:21。
- 系统运行时间:2小时03分钟。
- 当前登录用户数:2。
- 系统负载平均值:1分钟、5分钟和15分钟内的平均负载分别为0.00、0.03和0.05。
-
Tasks: 205 total, 1 running, 204 sleeping, 0 stopped, 0 zombie:
- 总进程数:205。
- 正在运行的进程数:1。
- 睡眠状态的进程数:204。
- 停止的进程数:0。
- 僵尸状态的进程数:0。
-
%Cpu(s): 25.0 us, 8.3 sy, 0.0 ni, 66.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st:
- 用户空间占用CPU百分比:25.0%。
- 内核空间占用CPU百分比:8.3%。
- 改变过优先级的进程占用CPU百分比:0.0%。
- 空闲CPU百分比:66.7%。
- 等待IO的CPU时间百分比:0.0%。
- 硬件中断占用CPU百分比:0.0%。
- 软件中断占用CPU百分比:0.0%。
- 虚拟机偷取时间:0.0%。
-
KiB Mem : 1862968 total, 106988 free, 865588 used,890392 buff/cache:
- 总内存:1862968 KiB。
- 空闲内存:106988 KiB。
- 已用内存:865588 KiB。
- 缓存:890392 KiB。
以下是一些常用的top
命令选项:
-
-d, --delay <seconds>
:指定刷新时间间隔。默认情况下,top
命令每3秒刷新一次屏幕,但你可以使用这个选项来改变它。例如,top -d 5
将设置刷新间隔为5秒。 -
-b, --batch
:批处理模式。这个选项对于将top
的输出重定向到文件或另一个命令非常有用,因为它关闭了交互式命令。示例:
top -b > top_output.txt
将top
的输出保存到top_output.txt
文件中。 -
-n, --iterations <number>
:指定top
命令运行的次数。与-b
选项结合使用时,可以在批处理模式下指定top
运行多少次后退出。示例:
top -b -n 2
将top
以批处理模式运行两次后退出。 -
-p, --pid <pid>
:监控特定的进程ID。如果你只对某个特定进程的资源使用情况感兴趣,可以使用这个选项。示例:
top -p 1234
将只显示PID为1234的进程的信息。 -
-u, --user <user>
:监控特定用户的所有进程。你可以使用这个选项来查看属于某个用户的进程资源使用情况。示例:
top -u alice
将显示用户alice
的所有进程。 -
-H, --threads
:显示每个进程的线程信息。默认情况下,top
显示的是进程信息,使用这个选项可以切换到线程级别的详细信息。示例:
top -H
将显示所有线程的信息。 -
-o, --sort <column>
:按指定列排序。默认情况下,进程是按CPU使用率降序排序的,但你可以通过这个选项改变排序的列。示例:
top -o %MEM
将按内存使用率降序排序进程。 -
-s, --secure
:以安全模式运行。这将禁止某些交互式命令,如杀死进程,这对于在公共终端上的使用很有帮助。示例:
top -s
以安全模式启动top
。
4.结束进程
(1)kill
命令是Linux系统中用于发送信号到进程的一个基本命令行工具。它可以用来结束进程、中断进程、或者通知进程某些事件已经发生。
- 用法:kill [选项/信号] <进程ID>
常用选项
-l
:列出所有可用的信号。-s
:指定发送的信号名称或编号。-L
:列出所有信号名称。
常用信号
1
(HUP):挂起信号,通常用于重新加载配置文件。2
(INT):中断信号,相当于Ctrl+C。9
(KILL):强制终止信号,无法被捕获或忽略。15
(TERM):终止信号,请求进程终止。18
(CONT):继续执行信号,用于恢复暂停的进程。
举例:
kill 1234
举例2: 强制结束进程
kill -9 1234
一般操作:
(2)killall:终止指定程序名的所有进程
killall -9 sshd
注意事项
- 发送信号之前,你需要确保你有足够的权限来结束目标进程。通常,只有进程的所有者或root用户可以结束一个进程。
- 在使用
-9
强制结束进程之前,最好先尝试使用-15
请求进程正常终止,因为强制结束可能会导致数据丢失或不正常的程序退出。 - 某些进程可能配置了信号处理程序,因此它们可以选择如何响应接收到的信号。例如,某些守护进程可能会在接收到HUP信号时重新加载配置文件而不是终止。