1

在 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?

4

0 回答 0