ps aux | grep su,如何杀死所有su进程?

ps aux | grep su,如何杀死所有su进程?

如果我ps aux | grep su切换用户几次后目前有以下情况:

fmaster  24811  0.0  1.3  10652  7000 pts/3    S    23:11   0:00 -su
root     24932  0.0  0.2   5352  1464 pts/3    S    23:12   0:00 su - root
root     24941  0.0  0.8   7772  4256 pts/3    S    23:12   0:00 -su
fmaster  27148  0.0  0.2   5352  1436 pts/3    S    23:28   0:00 su - fmaster
fmaster  27155  0.0  1.3  10652  7044 pts/3    S    23:28   0:00 -su
root     27284  0.0  0.2   5352  1468 pts/3    S    23:29   0:00 su -
root     27293  0.0  0.8   7732  4208 pts/3    S    23:29   0:00 -su
fmaster  27685  0.0  0.2   5352  1424 pts/3    S    23:32   0:00 su - fmaster
fmaster  27692  0.0  1.3  10652  7060 pts/3    S    23:32   0:00 -su
root     27842  0.0  0.2   5352  1468 pts/3    S    23:32   0:00 su -
root     27853  0.0  0.8   7748  4244 pts/3    S    23:32   0:00 -su
fmaster  29407  0.0  0.2   5352  1432 pts/3    S    23:41   0:00 su - fmaster
fmaster  29414  0.0  1.4  10656  7152 pts/3    S    23:41   0:00 -su
root     29846  0.0  0.2   5352  1468 pts/3    S    23:44   0:00 su -
root     29853  0.0  0.8   7700  4156 pts/3    S    23:44   0:00 -su
fmaster  30008  0.0  0.2   5352  1436 pts/3    S    23:45   0:00 su - fmaster
fmaster  30015  0.0  1.3  10652  7124 pts/3    S    23:45   0:00 -su
root     30180  0.0  0.2   5352  1468 pts/3    S    23:46   0:00 su -
root     30189  0.0  0.8   7744  4244 pts/3    S    23:46   0:00 -su

这些进程会自动清理吗?还是我必须手动终止它们?

答案1

有一个命令专门用于这种情况:全杀

killall su

答案2

当您“切换用户”时,您实际上是以该用户的身份生成一个新的 shell。您的旧 shell 仍然存在,并且是您当前 shell 的父级。想象一下,这就像建造一个新的纸板箱来玩,然后将其放入您现有的纸板箱中,然后跳进里面。

如果您将用户从 root 切换到 fmaster,然后再切换回 root,那么您现在将有三个 shell 正在运行,每个 shell 都是下一个 shell 的父级。重复此操作十次,您现在将有 11 个 shell 正在运行。这些 shell 都占用内存和 CPU,但除此之外,它们没有造成任何损害。

如果你已经安装了它,你可以看到所有这些 shell 都用命令连接在一起pstree。如果没有,你可以使用ps -ejHps -axjf

当你与服务器断开连接时,它们都将结束。

Joel 建议的命令killall将产生类似的效果,但执行方式很奇怪。首先,如果您当前正在具有 fmaster 权限的 shell 中运行,则只会终止 fmaster shell。即每隔一个。但是,由于现在所有 root shell 的父级和唯一子级都会被终止,因此它们也会终止。如果您以 root 身份运行该killall命令,则所有子 shell 都将被终止。无论哪种方式,这都会毫不留情地将您从所有子 shell 中转出并返回到您的原始登录 shell。

exit您可以通过输入,logout或 来结束当前 shell 并返回到前一个 shell ctrl-d

除非您特别需要以 root 身份运行 shell,否则最好在要sudo以 root 权限运行的任何命令前使用。

相关内容