菜鸟科技网

Linux强制中断命令有哪些?

最常用、最安全的方法:Ctrl + C

这是你应该首先尝试的方法。

Linux强制中断命令有哪些?-图1
(图片来源网络,侵删)
  • 作用:向当前前台进程发送一个 SIGINT (Interrupt) 信号,这个信号是请求进程正常退出的“礼貌”信号。
  • 工作原理:大多数程序在收到 SIGINT 信号后,会执行一些清理工作(比如保存临时文件、关闭网络连接等),然后正常终止。
  • 如何使用
    1. 确保要中断的进程正在前台运行(即你的终端光标在它的命令行界面下)。
    2. 按下 Ctrl + C
    3. 你会看到终端返回到命令提示符,进程被终止。

示例: 假设你运行了一个无限循环的命令 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)。
  • 如何使用
    1. 按下 Ctrl + Z
    2. 你会看到类似 [1]+ Stopped ping google.com 的输出,表示进程已被暂停并放入后台。
    3. 你可以使用 jobs 命令查看所有后台作业。
    4. 你可以:
      • 使用 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 + \

Linux强制中断命令有哪些?-图2
(图片来源网络,侵删)
  • 作用:向当前前台进程发送一个 SIGQUIT 信号。
  • 工作原理SIGQUIT 是一个比 SIGINT 更强烈的信号,它不仅会终止进程,通常还会生成一个 核心转储文件 (core dump),用于调试,这是“强制杀死”的终极手段之一,但应谨慎使用,因为它可能导致数据未保存。

使用 kill 命令

当你使用 Ctrl + Z 将进程放到后台后,或者你想通过进程 ID (PID) 来精确控制进程时,就需要使用 kill 命令。

kill 命令通过发送不同的“信号”来控制进程。

1 先温和,再强制:kill (默认 SIGTERM)

  • 作用:默认情况下,kill 命令发送 SIGTERM (Terminate) 信号。
  • 工作原理:和 SIGINT 类似,SIGTERM 也是一个“礼貌”的终止请求,进程可以捕获这个信号,执行清理操作后退出,这是推荐使用的首选 kill 方法。

如何使用

  1. 你需要找到要杀死进程的 PID,使用 pspgrep 命令。
    • ps aux | grep <进程名> (ps aux | grep ping)
    • pgrep <进程名> (pgrep ping,更简洁)
  2. 然后使用 kill <PID>

示例

Linux强制中断命令有哪些?-图3
(图片来源网络,侵删)
# 假设我们有一个 ping 进程在后台运行
ping google.com &
# 找到它的PID
pgrep ping
# 假设输出是 12345
# 发送SIGTERM信号
kill 12345
# 再查看进程,它已经消失了
pgrep ping
# (没有输出)

2 强制杀死:kill -9 (或 kill -SIGKILL)

当进程卡死,对 SIGTERMSIGINT 信号都无响应时,才使用此方法。

  • 作用:发送 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 强制、立即终止进程,无法被忽略或捕获。 最强大,能杀死任何进程。 极不安全,会导致数据丢失和资源未释放。 最后手段,用于无响应的“僵尸”进程。

最佳实践流程

当你需要中断一个命令时,遵循以下顺序:

  1. Ctrl + C:尝试优雅地停止它。
  2. 如果无效,按下 Ctrl + Z,然后用 kill %<job_id>kill <PID> 发送 SIGTERM 信号。
  3. 如果以上都无效,并且你确定要杀死它,最后才使用 kill -9 <PID>

kill -9 是你的“大锤”,不到万不得已不要轻易使用

分享:
扫描分享到社交APP
上一篇
下一篇