プロセスのルートを/tmp/mount_dirにマウントされた新しいファイルシステムに変更しようとしましたが、その中に/tmp/mount_dir/inner_mount_dirに別のディレクトリを作成しました。このシステムコールラッパー用に自分で作成しました。
int pivot_root(const char *new_root, const char *put_old){
return(syscall(SYS_pivot_root, new_root, put_old));
}
マニュアルページで指定された2つの入れ子になったディレクトリを作成した後、このコードでそれを呼び出します。
fprintf(stderr,"-->Changing the process's root...");
if(pivot_root(mount_dir, inner_mount_dir)){
fprintf(stderr,"Failed..%m\n");
return -1;
}else{
fprintf(stderr,"Success\n");
}
システムコールは正常に返されますが、問題はシステムがクラッシュ状態に入り、最初にGNOMEダッシュのすべてのアイコンが消えてシステムとまったく対話できないことです(システムがフリーズしてウィンドウを最初に変更でき、次にウィンドウのみを変更できます) )。すべてが終了します。)画面が黒い空白の画面に変わり、システムがシャットダウンするかのように左上に「-」が表示されますが、強制終了するまでその状態で停止します。
答え1
Hub_root() は名前空間で動作します。
プロセス(およびそのサブプロセス)にのみ影響を与えるには、まず新しいマウント名前空間を入力します。そしてmount --make-rslave /
。