如果我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 -ejH
或ps -axjf
。
当你与服务器断开连接时,它们都将结束。
Joel 建议的命令killall
将产生类似的效果,但执行方式很奇怪。首先,如果您当前正在具有 fmaster 权限的 shell 中运行,则只会终止 fmaster shell。即每隔一个。但是,由于现在所有 root shell 的父级和唯一子级都会被终止,因此它们也会终止。如果您以 root 身份运行该killall
命令,则所有子 shell 都将被终止。无论哪种方式,这都会毫不留情地将您从所有子 shell 中转出并返回到您的原始登录 shell。
exit
您可以通过输入,logout
或 来结束当前 shell 并返回到前一个 shell ctrl-d
。
除非您特别需要以 root 身份运行 shell,否则最好在要sudo
以 root 权限运行的任何命令前使用。