Namespace
為什麼 unshare 二進制呼叫 clone() 這麼多次?
我正在嘗試
unshare
在 Linux 中測試該命令。我正在使用它來創建一個新的使用者命名空間。我嘗試了以下測試:user1@myPC$ strace -e clone,unshare,fork,execve unshare --user execve("/usr/bin/unshare", ["unshare", "--user"], [/* 71 vars */]) = 0 unshare(CLONE_NEWUSER) = 0 execve("/bin/bash", ["-bash"], [/* 71 vars */]) = 0 clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9153 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9153, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9155 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9155, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9160 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9160, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9162 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9162, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9164 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9164, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7275768) = 9167 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=9167, si_uid=65534, si_status=0, si_utime=0, si_stime=0} --- nobody@MyPC:~$
我想問為什麼有這麼多的電話
clone()
打?
unshare(1)
根本沒有打電話clone(2)
。呼叫unshare(CLONE_NEWUSER)
系統呼叫後,unshare
程序正在執行到命令行上給出的程序或$SHELL
環境變數中的程序。在您的情況下,這是在處理來自其初始化腳本(等)的命令時
bash
分叉很多(fork(2)
現在是包裝器)。clone(2)``~/.bashrc