На CentOS 6.3, в моей основной программе я монтирую том Truecrypt, содержащий исполняемые файлы A и B, в точку монтирования, ./tmpfolder. Я запускаю программу А, делая
system("./tmpfolder/A")
от раздвоенного ребенка.
Программа А выполняет:
if (fork () == 0) {
система («cp ./tmpfolder/B / tmp»);
ChDir ( «/ TMP»);
execl («/ tmp / B», «B», (char *) 0);
Выход (0);
}
В этот момент программа A выходит, оставляя программу B запущенной. Все идет нормально.
Программа B выполняет:
chdir («/ tmp»);
while (notdone) {/ * делать вещи * /}
Теперь я хочу размонтировать том Truecrypt, не отключая программу B. Я не могу; папка используется.
После запуска А, ps
показывает B работает, с PID 27643 (например).
затем ls -l /proc/27643/cwd
показывает «/ tmp». Таким образом, текущий рабочий каталог B не является папкой точки монтирования.
Но моя попытка размонтировать не удалась: «устройство занято».
А также fuser -c ~/tmpfolder
шоу 27643
, PID программы B. Итак, программа B все еще использует папку точки монтирования.
Как программа B все еще может использовать папку, в которой программа A работала, а затем выходила? Как я могу запустить B без использования папки точки монтирования?
Задача ещё не решена.
Других решений пока нет …