CentOS 6.3 では、私のメイン プログラムで、実行可能ファイル A と B を含む Truecrypt ボリュームをマウント ポイント ./tmpfolder にマウントします。次のようにして、プログラムAを実行します
system("./tmpfolder/A")
分岐した子供から。
プログラム A の場合:
if (fork() == 0){
system("cp ./tmpfolder/B /tmp");
chdir("/tmp");
execl("/tmp/B", "B", (char *)0);
終了 (0);
}
この時点で、プログラム A は終了し、プログラム B は実行されたままになります。ここまでは順調ですね。
プログラム B は以下を行います:
chdir ("/tmp");
while(notdone){ /* 何かをする */ }
ここで、プログラム B を実行したまま Truecrypt ボリュームをアンマウントしたいと考えています。私はできません; フォルダは使用中です。
A を実行した後ps
、PID 27643 (たとえば) で B が実行されていることを示します。
次にls -l /proc/27643/cwd
「/tmp」を表示します。したがって、B の現在の作業ディレクトリはマウント ポイント フォルダーではありません。
しかし、アンマウントしようとすると失敗します:「デバイスがビジーです」。
と、プログラム B の PID がfuser -c ~/tmpfolder
表示27643
されます。したがって、どういうわけか、プログラム B はまだマウント ポイント フォルダーを使用しています。
プログラム A が実行されてから終了したフォルダーを、プログラム B がまだ使用している可能性はありますか? マウント ポイント フォルダーを使用せずに B を起動するにはどうすればよいですか?