我想杀死一些空闲的 ssh 会话。该远程服务器被许多用户使用,我如何识别我拥有的会话的pid?
当我运行时who
,我会得到一个由用户名标记的 ssh 会话列表。
$ who
me pts/0 2020-11-23 18:05 (tmux(id).%0)
me pts/1 2020-11-06 13:28 (<ip 1>)
someone pts/2 2020-11-09 09:36 (<ip 2>)
someone pts/3 2020-11-26 20:26 (<ip 2>)
...
当我运行时pstree
,会话不再按用户名标记。
$ pstree -p | grep sshd
|-sshd(930)-+-sshd(3518)---sshd(3536)---python(5736)-+-{python}(5744)
| |-sshd(4285)---sshd(4308)
| |-sshd(5428)---sshd(5450)
...
答案1
除非您是 root 用户,否则您将无法对其其他任何进程执行任何操作,因此仅向所有sshd
进程发出信号没有危险:
pkill sshd
如果您想明确地将其限制为您自己的进程:
pkill -U "$USER" sshd
或者,如果USER
您正在运行的 shell 中未使用该变量,请尝试"$LOGNAME"
代替"$USER"
, 或
pkill -U "$(id -un)" sshd
另请参阅该命令的手册pkill
。
如果您想获取匹配进程的进程 ID 列表,请使用pgrep
代替。pkill
使用pkill
或pgrep
with-o
仅表示或列出最老的过程。
答案2
如果是root
,请不要pkill sshd
在远程服务器上运行,否则您将无法重新连接:ssh: connect to host yourdomain.com port 22: Connection refused
。反而:
跑步
w
。在最后一列(标记为WHAT
)中找到您的空闲命令。然后查看第二列(标记为TTY
)以查找您的空闲会话,例如:pts/0
。跑步
ps aux | grep pts/0
。在最后一列中找到您的空闲命令 - 它的 PID 将在第二列中,例如:12345
。还要查找-bash
并记下其 PID,例如:12346
。kill 12345; kill 12346
使用上面的 PID运行。重新运行
w
。pts/0
不应再显示。