为什么“pkill /?”会终止我的 SSH 会话?

为什么“pkill /?”会终止我的 SSH 会话?

通过 SSH 以 root 身份运行以下命令 (bash) 后:

    pkill --help
    pkill -h
    pkill /?

前两个命令没有给我提供任何信息,这就是为什么运行第三个命令(有点本能......)。

接下来发生的事情是,我与服务器的 SSH 会话关闭了,并且无法重新连接。我猜它停止了所有(或大多数)正在运行的进程,包括负责此类会话的守护进程。

我想了解为什么发生了什么:对我的输入的具体评估(一步一步)是什么,以及它导致了什么。

我最好的猜测是,它与 shell 对 '?' 字符的评估有关,该评估可能转换为几个单字符表达式的列表,这些列表被传递给 pkill,然后 pkill 又关闭了这些 PID。

答案1

在 CentOS 5.2 上,运行提供的手册页man pkill表明它将把 /? 解释为进程名称或命令行的扩展正则表达式。

因此 ? 表示前一个字符可能出现也可能不出现。由于只有一个其他字符,即 /,因此 pkill 会终止所有可以终止的进程。

在 Linux 系统上,请尝试记住 man 命令以首先获取文档。

答案2

跑步pgrep /?...

这将返回与该 shell 模式匹配的进程的 PID。pkill使用相同参数运行将终止pgrep /?输出中列出的所有内容。

我认为您正在终止您自己的会话以及许多其他进程(在本例中是所有 PID)。

答案3

命令行表达式的语法/switch1 /switch2是 Windows/DOS 的东西。在 Linux 以及我所知道的所有 UNIX 上,命令行参数语法是--switch -s/?被认为是正则表达式。正则表达式/?,至少就我从grep的手册页中了解到的而言,将匹配 0 或 1。/这似乎无法解释为什么这会终止 SSH,但它确实解释了发生了什么。

相关内容