ここで何が起こっているのか少し混乱しています。CLONE_NEWNS フラグを設定してクローンを呼び出した後、新しいマウント ポイントが追加されたガイドに従っていました。マウント ポイントは、子プロセスに対してのみ存在するはずでした。新しいファイルシステムの名前空間を変更しようとしていますが、親の名前空間に影響しているようです。
私の C プログラムはとても単純です。メインはクローンを呼び出します
pid_t pid = clone(child_exec,c_stack, SIGCHLD | CLONE_NEWNS | CLONE_NEWPID ,args);
args は、実行するコマンドを含むチャット配列です。
int child_exec(void *arg)
{
int err =0;
char **commands = (char **)arg;
mount("none", "/mytmp", "tmpfs", 0, "");
execvp(commands[0],commands);
return 0;
}
execvp に渡されるコマンドが である場合、mount
出力に /mytmp マウント ポイントが含まれmount
、プログラムの終了後にコマンドを再度実行すると、/mytmp が表示されないことが予想されます。それは起こっていません。execvp が呼び出されたときと、mount を実行した後に表示されます。
MS_PRIVATE フラグを付けてマウントしてみましたunshare(CLONE_FS);
また、子プロセスから /proc をアンマウントしようとすると、get resource is busy エラーが発生するという同様の問題がありました。私は、新しい名前空間でそれが起こるべきではないと考えました。