简介
在这个实验中,你将学习 Linux 进程管理的基本技能,重点是如何识别和终止进程。进程管理对于任何 Linux 用户或管理员来说都是一项基本技能,因为它能让你有效地管理系统资源。
你将学习如何使用 ps
命令来识别正在运行的进程,以及如何在必要时使用 kill
命令来终止它们。这些工具对于维护系统性能和处理无响应的应用程序至关重要。
在这个实验结束时,你将能够识别进程、了解它们的属性,并使用各种方法终止它们。这些技能对于故障排除和高效管理 Linux 系统非常有价值。
在这个实验中,你将学习 Linux 进程管理的基本技能,重点是如何识别和终止进程。进程管理对于任何 Linux 用户或管理员来说都是一项基本技能,因为它能让你有效地管理系统资源。
你将学习如何使用 ps
命令来识别正在运行的进程,以及如何在必要时使用 kill
命令来终止它们。这些工具对于维护系统性能和处理无响应的应用程序至关重要。
在这个实验结束时,你将能够识别进程、了解它们的属性,并使用各种方法终止它们。这些技能对于故障排除和高效管理 Linux 系统非常有价值。
在 Linux 中,每个正在运行的程序或应用程序都被视为一个进程。每个进程都有一个唯一的标识符,称为进程 ID(PID)。在终止进程之前,你需要使用其 PID 来识别它。
让我们先学习如何使用 ps
命令查看正在运行的进程。该命令会显示系统中活动进程的信息。
首先,在 LabEx 虚拟机环境中打开一个终端,并运行以下命令:
ps
你将看到当前终端会话中正在运行的进程的基本列表。输出应该类似于以下内容:
PID TTY TIME CMD
2104 pts/0 00:00:00 zsh
2116 pts/0 00:00:00 ps
此输出显示:
PID
:进程 ID 号TTY
:进程运行所在的终端类型TIME
:进程使用的 CPU 时间量CMD
:启动该进程的命令要查看系统上运行的所有进程的更全面列表,请使用带有附加选项的以下命令:
ps -aux
这些选项的含义如下:
-a
:显示所有用户的进程-u
:以详细的面向用户的格式显示-x
:包括没有控制终端的进程输出会更长、更详细,显示系统上运行的所有进程:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 167936 11876 ? Ss 10:30 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 10:30 0:00 [kthreadd]
...
labex 2104 0.0 0.1 11108 5456 pts/0 Ss 10:35 0:00 zsh
labex 2130 0.0 0.0 9828 3384 pts/0 R+ 10:36 0:00 ps -aux
现在,让我们创建一个简单的后台进程,以便进行练习:
sleep 300 &
sleep_pid=$!
此命令启动一个进程,该进程将“休眠”(不执行任何操作)300 秒(5 分钟)。&
符号将其放在后台运行,$!
捕获最近启动的后台进程的 PID。
让我们验证该进程是否正在运行:
echo "The sleep process ID is: $sleep_pid"
ps | grep sleep
你应该会看到类似于以下的输出:
The sleep process ID is: 2135
2135 pts/0 00:00:00 sleep
现在你知道如何识别进程并找到它们的 PID 了。在下一步中,我们将学习如何终止这个进程。
kill
命令终止进程现在你已经识别出了一个进程及其 PID,接下来可以学习如何使用 kill
命令来终止它。kill
命令会向进程发送一个信号,指示其终止。
kill
命令的基本语法如下:
kill [options] <PID>
让我们来终止上一步中创建的 sleep
进程。我们已将其 PID 存储在 $sleep_pid
变量中。使用以下命令来终止它:
kill $sleep_pid
如果你忘记了该进程的 PID,可以使用以下命令再次查找:
ps | grep sleep
执行 kill
命令后,验证该进程是否已被终止:
ps | grep sleep
如果进程已成功终止,你应该看不到输出,或者输出中仅显示 grep
进程本身。这意味着 sleep
进程已不再运行。
如果你想更彻底地确认,可以再次使用 ps
命令列出所有进程:
ps -aux | grep sleep
输出可能如下所示:
labex 2156 0.0 0.0 7236 720 pts/0 S+ 10:40 0:00 grep --color=auto sleep
显示的唯一进程是 grep
命令本身,这表明 sleep
进程已被终止。
默认情况下,kill
命令会向进程发送一个 TERM(终止)信号,这允许进程在执行任何清理操作后正常退出。在大多数情况下,这足以终止一个进程。
现在你已经成功地使用 kill
命令识别并终止了一个进程,这是在 Linux 中管理进程的一项基本技能。
kill
信号在 Linux 中,kill
命令可以向进程发送多种类型的信号,而不仅仅是终止信号。了解这些信号能让你更好地控制进程的终止方式。
首先,通过运行以下命令查看所有可用的信号:
kill -l
这将列出 kill
命令可以发送的所有信号。输出如下:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
最常用的信号有:
SIGTERM
(15):kill
命令默认发送的信号。请求进程正常终止。SIGKILL
(9):强制进程立即终止。当进程对 SIGTERM
信号无响应时使用。SIGHUP
(1):传统上用于重置或重新加载配置文件。SIGINT
(2):当你在终端中按下 Ctrl+C
时发送。让我们再创建一个 sleep
进程来进行练习:
sleep 300 &
sleep_pid=$!
echo "The new sleep process ID is: $sleep_pid"
现在,使用信号编号向进程发送特定的信号:
kill -15 $sleep_pid
这等同于默认的 kill
命令,因为它发送的是 SIGTERM
信号(信号编号 15)。
验证该进程是否已被终止:
ps | grep sleep
让我们再创建一个 sleep
进程来演示 SIGKILL
信号:
sleep 300 &
sleep_pid=$!
echo "The third sleep process ID is: $sleep_pid"
现在,使用 SIGKILL
信号强制终止该进程:
kill -9 $sleep_pid
验证该进程是否已被终止:
ps | grep sleep
SIGKILL
信号(9)是一种“最后手段”选项,原因如下:
始终先尝试使用 SIGTERM
信号,只有当进程对 SIGTERM
信号无响应时,才使用 SIGKILL
信号。
除了基本的 ps
和 kill
命令外,Linux 还提供了其他用于管理进程的命令。这些工具在识别和终止进程方面提供了更多的灵活性和便利性。
pgrep
命令pgrep
命令允许你通过进程名来查找进程,而无需手动查看 ps
命令的输出:
pgrep sleep
该命令将查找所有名称中包含 "sleep" 的进程,并输出它们的 PID。
pkill
命令pkill
命令结合了 pgrep
和 kill
的功能——它通过进程名查找进程并向它们发送信号:
## Start two sleep processes
sleep 300 &
sleep 300 &
## Kill all sleep processes
pkill sleep
验证所有 sleep
进程是否已被终止:
ps | grep sleep
killall
命令与 pkill
类似,killall
命令通过进程名终止进程:
## Start two more sleep processes
sleep 300 &
sleep 300 &
## Kill all sleep processes
killall sleep
再次验证:
ps | grep sleep
nice
和 renice
调整进程优先级Linux 还允许你使用 nice
和 renice
命令来控制进程的优先级。
让我们以较低的优先级启动一个进程:
nice -n 10 sleep 300 &
nice
值的范围从 -20(最高优先级)到 19(最低优先级),默认值为 0。只有 root 用户可以设置负的 nice
值。
你可以使用 renice
更改正在运行的进程的优先级:
sleep_pid=$!
echo "Sleep process ID with lower priority: $sleep_pid"
renice -n 15 -p $sleep_pid
让我们检查新的优先级:
ps -o pid,nice,cmd -p $sleep_pid
最后,终止这个进程:
kill $sleep_pid
这些高级进程管理命令为管理多个进程和控制系统资源提供了更高效的方法,这在繁忙的系统上或排查性能问题时特别有用。
在本次实验中,你学习了对系统管理和故障排除非常有价值的 Linux 进程管理核心技能:
ps
命令列出正在运行的进程并查找它们的进程 ID(PID)。kill
命令通过进程的 PID 向其发送终止信号。kill
信号:你探索了可以发送给进程的不同类型的信号,包括用于正常终止的 SIGTERM
(15)和用于强制终止的 SIGKILL
(9)。pgrep
、pkill
和 killall
,它们可以通过进程名查找和终止进程,以及如何使用 nice
和 renice
控制进程优先级。这些技能使你能够:
进程管理是 Linux 系统管理的一个基本方面,你在本次实验中学到的命令被 Linux 管理员和用户日常使用,以维护系统的性能和稳定性。