当我们以root执行su时,su命令会以当前shell进程为父进程来创建一个新的shell进程,这个shell进程是提供给我们所要su到的那个用户使用的,而root的shell进程仍然存在,反过来也是一样的,这就是你所问的问题的原因,因为之前那个用户的shell进程还没关闭,你可以使用exit退出一下,可以看到,并不是退出登录了,而是回到之前的那个用户去了。因为它们是父子进程的关系,子进程的结束当然 不会影响到父进程的执行了。但是我们如果强行杀死父进程,那就直接退出了。 其实很多人并不了解,whoami和who am i的区别,他们的作用是不同的。
who am i 显示当前shell进程的实际用户ID。 whomai 显示当前shell进程的有效用户ID。 很多时候,这两个输出是一样的,以至于我们以为这两个命令的作用是相同的。
实例:root@yunhw-Aspire-4750G:~# who am i root pts/0 2011-12-10 13:13 (:0.0) root@yunhw-Aspire-4750G:~# whoami root root@yunhw-Aspire-4750G:~#ps -ef root 2939 2935 0 13:18 pts/0 00:00:00 bash root@yunhw-Aspire-4750G:~# su - yunhw yunhw@yunhw-Aspire-4750G:~$ who am i root pts/0 2011-12-10 13:13 (:0.0) yunhw@yunhw-Aspire-4750G:~$ whoami yunhw root@yunhw-Aspire-4750G:~#ps -ef root 2939 2935 0 13:18 pts/0 00:00:00 bash yunhw 2958 2939 0 13:19 pts/0 00:00:00 su - yunhw yunhw 2966 2958 7 13:19 pts/0 00:00:00 -su root@yunhw-Aspire-4750G:~#sudo kill -9 2939