在 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
显示 B 正在运行,PID 为 27643(例如)。
然后ls -l /proc/27643/cwd
显示“/tmp”。所以B的当前工作目录不是挂载点文件夹。
但是我的卸载尝试失败了:“设备正忙”。
并fuser -c ~/tmpfolder
显示27643
程序 B 的 PID。因此,不知何故,程序 B 仍在使用挂载点文件夹。
程序 B 如何仍在使用程序 A 运行然后退出的文件夹?如何在不使用挂载点文件夹的情况下启动 B?