Linux 进程管理
时间:2023-3-14 20:19 作者:wen 分类: Linux
[TOC]
进程的概念
Linux 进程是正在运行的程序的实例。它是一个在内存中运行的程序实例,由操作系统管理和调度。进程拥有自己的虚拟地址空间、寄存器集、堆栈和文件描述符等资源。每个进程都有一个唯一的进程标识符(PID)。
进程是操作系统进行任务管理和资源分配的基本单位。Linux 操作系统采用了多任务和时间分片的技术,即在同一时间内可以有多个进程运行,但是 CPU 会快速切换不同进程之间的运行,使得用户感觉所有进程都在同时运行。
进程可以通过父子进程的方式创建,子进程会继承父进程的大部分属性和资源,并可以独立运行。进程之间可以通过进程间通信机制来进行数据传输和共享,比如管道、共享内存和套接字等。
在 Linux 中,可以使用一些命令来管理进程,如 ps 命令用于列出当前正在运行的进程,kill 命令用于终止一个进程。除了这些基本命令之外,Linux 中还有一些高级工具和方法来监控和管理进程,如 top 和 htop 命令。
CentOS6管理进程的方式
init
CentOS7管理进程的凡是
systemd
进程的属性
ps
命令是 Linux 中一个常用的命令,用于查看当前正在运行的进程。
下面是 ps
命令的一些常用选项:
ps -e
:列出所有正在运行的进程,包括系统进程和用户进程。ps -aux
:列出所有正在运行的进程,包括用户 ID、CPU 占用率等详细信息。ps -f
:列出所有正在运行的进程,包括父进程 ID、进程状态等详细信息。ps -p pid
:查看指定 PID 的进程信息。ps -u username
:查看指定用户名的进程信息。
例如,使用 ps -aux
命令可以查看所有正在运行的进程,并显示详细信息,如下所示:
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.5 0.3 193956 7036 ? Ss 19:36 0:02 /usr/lib/systemd/systemd --switched-roo
root 2 0.0 0.0 0 0 ? S 19:36 0:00 [kthreadd]
其中,每行的信息表示一个进程的详细信息,包括进程所属用户、进程 ID(PID)、CPU 占用率、内存占用率、虚拟内存大小、实际内存大小、终端类型、进程状态、启动时间、执行时间和命令等。
ps
命令中 STAT
列显示了进程的状态信息,具体取值及其含义如下:
R
:正在运行或者是可运行状态。S
:处于休眠状态,通常是等待某些事件的发生,如 I/O 完成。D
:不可中断的休眠状态,通常是在等待某些非常重要的事件发生,如磁盘 I/O 操作。T
:已停止或被追踪暂停。Z
:已死亡的进程,但父进程还没有回收它的进程描述符(Process Descriptor),成为僵尸进程(Zombie Process)。t
:已停止或被追踪暂停的进程,它的子进程还在运行。W
:换页中(swapped out),表示进程被移到了交换空间中。X
:死掉的进程,但它的进程描述符仍然存在。K
:位于内存中的进程,但被杀死了。<
:高优先级。N
:低优先级。s
:进程的领导者(通常是 shell)。+
:在前台进程组中。
其中,R
表示正在运行的进程,S
表示休眠状态的进程,Z
表示僵尸进程,这些状态是比较常见的。
需要注意的是,状态信息不是进程状态的全部信息,还需要结合其他信息来确定进程的状态。例如,进程的 CPU 占用率等信息可以帮助确定进程是否正在运行或休眠。
系统负载
updae
uptime
命令用于显示系统当前的运行时间和系统负载情况。运行该命令会输出如下信息:
[root@localhost ~]# uptime
19:59:27 up 22 min, 1 user, load average: 0.03, 0.03, 0.05
输出信息包含以下内容:
19:59:27
:当前时间;- up 22 min:系统已经运行了 22 分钟;
1 user
:当前有 1 个用户登录系统;load average: 0.03, 0.03, 0.05
:系统的负载情况,分别表示最近 1 分钟、5 分钟和 15 分钟的平均负载。在这个例子中,系统的负载非常轻微,可以看到 1 分钟和 5 分钟的平均负载都小于 1。
系统负载指的是 CPU 处理任务的数量。当系统运行的进程和线程数量超过了 CPU 处理能力时,系统负载会升高,表明系统正在处理更多的任务。负载值的大小可以根据系统的 CPU 核心数量来判断,例如,在一个 4 核 CPU 的系统中,如果负载值超过 4,就说明系统已经超负荷了。因此,了解系统的负载情况可以帮助我们评估系统的性能瓶颈和资源利用情况,及时进行优化和调整。
top
top
命令用于实时监控系统的进程和系统资源占用情况,是一款非常常用的系统性能监控工具。当运行 top
命令后,会显示一个实时更新的进程列表,以及系统资源的使用情况。
下面是一个 top
命令输出的示例:
top - 20:06:42 up 30 min, 1 user, load average: 0.01, 0.04, 0.05
Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.9 us, 5.7 sy, 0.0 ni, 91.4 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2027860 total, 1715912 free, 193316 used, 118632 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 1694920 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
952 root 20 0 273004 4784 3648 S 5.9 0.2 0:03.75 vmtoolsd
1 root 20 0 193956 7036 4164 S 0.0 0.3 0:02.93 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
4 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
6 root 20 0 0 0 0 S 0.0 0.0 0:00.03 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.14 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:00.75 rcu_sched
10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain
11 root rt 0 0 0 0 S 0.0 0.0 0:00.02 watchdog/0
12 root rt 0 0 0 0 S 0.0 0.0 0:00.03 watchdog/1
13 root rt 0 0 0 0 S 0.0 0.0 0:00.10 migration/1
14 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/1
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0H
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd
终止进程
kill
kill
命令用于向指定的进程发送信号(signal),以控制进程的运行状态。默认情况下,kill
命令发送的是 TERM 信号,使进程正常终止。
以下是 kill
命令的基本语法:
kill [选项] <进程号> [...进程号]
常用的选项包括:
-s <信号>
:指定要发送的信号,如-s SIGINT
表示发送中断信号(相当于按下 Ctrl-C);-l
:列出系统支持的所有信号;-9
:发送强制终止信号,即无条件终止进程。
pkill
pkill
命令与 kill
命令类似,都是用于终止进程,不同之处在于 pkill
命令通过进程名或者其他属性(如用户、CPU 使用率等)来匹配进程并杀死它们。与 kill
命令需要指定进程号不同,pkill
命令可以根据进程名或其他属性匹配到多个进程,并将它们全部终止。
以下是 pkill
命令的基本语法:
pkill [选项] <进程名>
常用的选项包括:
-u <用户>
:指定要匹配的进程的所有者;-f
:匹配进程的完整命令行而不是进程名;-signal <信号>
:指定要发送的信号。
killall
killall
命令与 pkill
命令类似,也是用于终止进程,不同之处在于 killall
命令只匹配进程名来终止进程,而不支持其他属性匹配。
以下是 killall
命令的基本语法:
killall [选项] <进程名>
常用的选项包括:
-u <用户>
:指定要匹配的进程的所有者;-e
:仅匹配精确进程名,而不是包含进程名的命令行;-signal <信号>
:指定要发送的信号。
服务管理
以下是一些 Linux 服务管理命令:
systemctl
- systemd 系统管理工具,用于管理系统服务。可以启动、停止、重启、状态查询等等。示例命令:- 启动服务:
systemctl start service-name
- 停止服务:
systemctl stop service-name
- 重启服务:
systemctl restart service-name
- 查看服务状态:
systemctl status service-name
- 设置服务开机自启动:
systemctl enable service-name
- 取消服务开机自启动:
systemctl disable service-name
- 启动服务:
service
- 传统的系统服务管理工具,现在已经被systemctl
取代。但一些老版本的 Linux 还在使用service
。示例命令:- 启动服务:
service service-name start
- 停止服务:
service service-name stop
- 重启服务:
service service-name restart
- 查看服务状态:
service service-name status
- 设置服务开机自启动:
chkconfig service-name on
- 取消服务开机自启动:
chkconfig service-name off
- 启动服务:
标签: linux