sco*_*ooz 5 linux ssh bash root
通过 SSH 以 root 身份运行以下命令 (bash) 后:
pkill --help
pkill -h
pkill /?
Run Code Online (Sandbox Code Playgroud)
前两个命令没有为我提供任何信息,这就是为什么运行第三个命令(有点本能......)。
接下来发生的事情是,我与服务器的 SSH 会话关闭,并且无法重新连接。我猜它停止了所有(或大部分)正在运行的进程,包括负责此类会话的守护进程。
我想了解为什么会发生这种情况:我的输入的确切评估(逐步)是什么以及它是什么原因造成的。
我最好的猜测是它与 shell 对 '?' 的评估有关。字符,它可能转换为一些单字符表达式的列表,这些表达式被传递给 pkill,而 pkill 又关闭了这些 PID。
bec*_*est 20
在 CentOS 5.2 上,运行提供的手册页man pkill说它会解释 /? 作为进程名称或命令行的扩展正则表达式。
所以 ?表示前一个角色可能出现也可能不出现。由于只有一个其他字符,即 /,因此 pkill 可以杀死所有可能的进程。
在 linux 系统上,尽量记住 man 命令以首先获取文档。
跑pgrep /?...
这将返回与该 shell 模式匹配的进程的 PID。pkill使用相同的参数运行将杀死pgrep /?输出中列出的所有内容。
我认为您正在杀死自己的会话以及许多其他进程(在本例中为所有 PID)。