最常用、最安全的方法:Ctrl + C
这是你应该首先尝试的方法。

- 作用:向当前前台进程发送一个
SIGINT(Interrupt) 信号,这个信号是请求进程正常退出的“礼貌”信号。 - 工作原理:大多数程序在收到
SIGINT信号后,会执行一些清理工作(比如保存临时文件、关闭网络连接等),然后正常终止。 - 如何使用:
- 确保要中断的进程正在前台运行(即你的终端光标在它的命令行界面下)。
- 按下
Ctrl + C。 - 你会看到终端返回到命令提示符,进程被终止。
示例:
假设你运行了一个无限循环的命令 ping google.com,想让它停下来。
# 在一个终端中运行 ping google.com # PING google.com (142.250.196.68) 56(84) bytes of data. # 64 bytes from lhr4s01-in-f14.1e100.net (142.250.196.68): icmp_seq=1 ttl=116 time=15.2 ms # 64 bytes from lhr4s01-in-f14.1e100.net (142.250.196.68): icmp_seq=2 ttl=116 time=15.1 ms # 64 bytes from lhr4s01-in-f14.1e100.net (142.250.196.68): icmp_seq=3 ttl=116 time=15.0 ms # ... (它会一直ping下去) # 按下 Ctrl + C # ^C # --- google.com ping statistics --- # 3 packets transmitted, 3 received, 0% packet loss, time 2003ms # rtt min/avg/max/mdev = 15.015/15.091/15.167/0.061 ms # # 你的命令提示符回来了,说明进程已被中断
更强制的方法:Ctrl + Z
这个方法不会杀死进程,而是将其“暂停”并放到后台。
- 作用:向当前前台进程发送一个
SIGTSTP(Terminal Stop) 信号,这个信号会暂停进程的执行。 - 工作原理:进程被挂起,不再消耗 CPU,但仍然存在于内存中,它变成了一个“作业”(job)。
- 如何使用:
- 按下
Ctrl + Z。 - 你会看到类似
[1]+ Stopped ping google.com的输出,表示进程已被暂停并放入后台。 - 你可以使用
jobs命令查看所有后台作业。 - 你可以:
- 使用
fg(foreground) 命令将其恢复到前台继续运行。 - 使用
bg(background) 命令使其在后台继续运行。 - 使用
kill %1(1是作业号) 来彻底杀死它。
- 使用
- 按下
示例:
# 重新运行 ping ping google.com # 按下 Ctrl + Z # ^Z # [1]+ Stopped ping google.com # 查看后台作业 jobs # [1]+ Stopped ping google.com # 彻底杀死这个作业 kill %1 # 再次查看作业,会发现它已经消失了 jobs # (没有输出)
当 Ctrl + C 无效时:Ctrl + \ (Backslash)
极少数情况下,一个程序可能会忽略 SIGINT 信号(某些正在执行底层系统调用的程序),这时可以使用 Ctrl + \。

- 作用:向当前前台进程发送一个
SIGQUIT信号。 - 工作原理:
SIGQUIT是一个比SIGINT更强烈的信号,它不仅会终止进程,通常还会生成一个 核心转储文件 (core dump),用于调试,这是“强制杀死”的终极手段之一,但应谨慎使用,因为它可能导致数据未保存。
使用 kill 命令
当你使用 Ctrl + Z 将进程放到后台后,或者你想通过进程 ID (PID) 来精确控制进程时,就需要使用 kill 命令。
kill 命令通过发送不同的“信号”来控制进程。
1 先温和,再强制:kill (默认 SIGTERM)
- 作用:默认情况下,
kill命令发送SIGTERM(Terminate) 信号。 - 工作原理:和
SIGINT类似,SIGTERM也是一个“礼貌”的终止请求,进程可以捕获这个信号,执行清理操作后退出,这是推荐使用的首选kill方法。
如何使用:
- 你需要找到要杀死进程的 PID,使用
ps或pgrep命令。ps aux | grep <进程名>(ps aux | grep ping)pgrep <进程名>(pgrep ping,更简洁)
- 然后使用
kill <PID>。
示例:

# 假设我们有一个 ping 进程在后台运行 ping google.com & # 找到它的PID pgrep ping # 假设输出是 12345 # 发送SIGTERM信号 kill 12345 # 再查看进程,它已经消失了 pgrep ping # (没有输出)
2 强制杀死:kill -9 (或 kill -SIGKILL)
当进程卡死,对 SIGTERM 和 SIGINT 信号都无响应时,才使用此方法。
- 作用:发送
SIGKILL信号。 - 工作原理:
SIGKILL是一个“不可忽略”的信号,它直接通知内核立即终止该进程,不给进程任何执行清理代码的机会,这可能导致数据丢失、临时文件未清理等问题。这是最后的手段。
如何使用:
kill -9 <PID>
示例:
# 假设一个进程PID是 54321,且无响应 kill -9 54321
总结与对比
| 方法 | 发送的信号 | 行为 | 优点 | 缺点/注意事项 | 使用场景 |
|---|---|---|---|---|---|
Ctrl + C |
SIGINT |
请求进程正常退出,可执行清理。 | 最安全、最常用,符合程序设计预期。 | 无 | 前台程序需要停止时,首选方法。 |
Ctrl + Z |
SIGTSTP |
暂停进程,放入后台。 | 不杀死进程,可以稍后恢复或转入后台运行。 | 进程仍在消耗内存(不消耗CPU)。 | 暂时让出终端,但不想关闭程序时。 |
Ctrl + \ |
SIGQUIT |
强制终止进程,并生成核心转储。 | 能杀死 Ctrl+C 杀不死的进程。 |
可能导致数据丢失,产生调试文件。 | Ctrl+C 完全无效时的最后手段。 |
kill <PID> |
SIGTERM (默认) |
请求进程正常退出,可执行清理。 | 安全,与 Ctrl+C 类似,但可精确控制。 |
需要先知道 PID。 | 杀死后台进程,或远程操作时。 |
kill -9 <PID> |
SIGKILL |
强制、立即终止进程,无法被忽略或捕获。 | 最强大,能杀死任何进程。 | 极不安全,会导致数据丢失和资源未释放。 | 最后手段,用于无响应的“僵尸”进程。 |
最佳实践流程
当你需要中断一个命令时,遵循以下顺序:
Ctrl + C:尝试优雅地停止它。- 如果无效,按下
Ctrl + Z,然后用kill %<job_id>或kill <PID>发送SIGTERM信号。 - 如果以上都无效,并且你确定要杀死它,最后才使用
kill -9 <PID>。
kill -9 是你的“大锤”,不到万不得已不要轻易使用。
