當我們以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