Linuxで名前空間に関して設定できるのはclone(2)、unshare(2)、setns(2)で、このうち実行中のプロセスの名前空間を変更できるのは後者の2個なんですが、カーネル側ではkernel/nsproxy.cにあるswitch_task_namespaces()が実際の処理を行ってます。そんなわけでこの辺りのコードを見てみます。 まず、switch_task_namespaces()を呼んでいる箇所ですが以下の4つがありました unshareシステムコールの実行時 setnsシステムコールの実行時 exitシステムコール実行時 copy_process()のエラー処理 このうち1、2は実行中のプロセスの名前空間を切り替えるため、3はプロセスの終了処理の一環で使用していた名前空間をプロセスから参照できなくさせるため、最後は名前空間を設定したけどプロセスの生成に失敗したので後始末と