[Linux]

Think twice, code once. / 2024-07-08 / 原文

端口范围

1~65535知名端口(Well-Known Ports):

  • 范围: 0-1023
    用途: 分配给常用的服务和协议(如 HTTP、FTP、SSH 等)。这些端口通常由系统或根用户使用。
    示例:
    HTTP: 80
    HTTPS: 443
    FTP: 21
    SSH: 22
    注册端口(Registered Ports):

  • 范围: 1024-49151
    用途: 分配给用户或注册的网络服务和应用程序。这些端口通常由非特权用户使用。
    示例:
    MySQL: 3306
    PostgreSQL: 5432
    Docker: 2375
    动态/私有端口(Dynamic/Private Ports):

  • 范围: 49152-65535
    用途: 分配给临时或私有的网络连接,通常用于客户端在通信时随机分配的源端口。
    示例: 客户端应用程序连接到服务器时,通常会从此范围内分配端口。

KILL

kill -9 是一个在 Unix 和 Linux 系统上非常强大的命令,用于立即终止一个进程。它发送一个 SIGKILL 信号给指定的进程,强制其立即停止运行。以下是详细的解释和使用示例。

kill -9 的含义

  • kill: 这是一个用于发送信号给进程的命令。默认情况下,它会发送一个 SIGTERM 信号,要求进程优雅地终止。
  • -9: 这是信号编号,代表 SIGKILL 信号。SIGKILL 是一个无法被捕获、阻塞或忽略的信号,它会强制终止进程。

使用 kill -9 的场景

kill -9 通常在以下场景中使用:

  1. 进程无法正常终止: 当使用 killkill -15(SIGTERM)无法终止进程时,可以使用 kill -9 强制终止。
  2. 紧急情况: 当某个进程严重影响系统性能或稳定性,需要立即终止时使用。

使用 kill -9 的示例

查找进程 ID (PID)

首先,你需要知道要终止的进程的 PID。可以使用 pstophtoppgrep 等命令查找进程的 PID。

ps aux | grep some_process_name

终止进程

一旦知道进程的 PID,就可以使用 kill -9 终止它。例如,如果 PID 是 12345:

kill -9 12345

使用 pgreppkill

如果你知道进程的名字,可以使用 pgrep 查找 PID,或者直接使用 pkill 终止进程:

pkill -9 some_process_name

注意事项

  • 数据丢失风险: 因为 SIGKILL 信号会立即终止进程,没有机会进行任何清理操作(例如保存数据、释放资源等),所以在使用 kill -9 时要小心,避免数据丢失。
  • 优雅终止优先: 尽量先使用 kill(SIGTERM)或 kill -15,给进程一个机会进行清理和释放资源。如果无效,再考虑使用 kill -9
  • 权限问题: 终止其他用户的进程通常需要管理员权限(sudo)。

示例代码

以下是一个简单的示例,展示如何查找并终止一个 Python 脚本进程:

# 运行一个示例 Python 脚本
python -c "while True: pass" &

假设这个脚本的 PID 是 12345,可以使用以下命令终止它:

# 查找 PID
ps aux | grep 'python -c "while True: pass"'

# 终止进程
kill -9 12345

或者直接使用 pkill 终止所有运行中的 Python 进程(请谨慎使用):

pkill -9 python

总结

kill -9 是一个强大的命令,用于立即终止进程,但应谨慎使用,优先尝试优雅的终止方法。在执行之前,确保确实需要强制终止进程,并注意可能引发的数据丢失和资源未释放等问题。