Сайт | Скачать | Видео | Wiki

Автор Тема: как реализовать отмонтирование сфс при выходе из программы?  (Прочитано 6365 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Думаю уже который день над проблемой автомонтирования сфс. Допустим, имеем в дистро десятка три сфс, и хотим, чтобы при запуске прог, входящих в сфс, последний автоматически примонтировался. Эта часть задачи решаема легко.
Теперь вторая часть, более трудная: как реализовать отмонтирование аддона по выходу из приложения?

мысль первая, соорудить некий демон, который будет сканить список запущенных процессов раз в минуту, например, и при выгрузке нежного процесса отмонтировать соответствующий аддон.

мысль вторая, Алекс предлагал, привязать каким-то образом нажатие крестика в окне программы к отмонтированию сфс

С какой стороны подходить к решению этих задач? или, возможно, у кого то появится более простое решение?

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
http://www.cyberforum.ru/cpp-linux/thread21028.html

в винде я примерно процесс представляю, там достаточно вызвать прогу из батника с ключом  /wait

черт, в линуксе надо примерно то же самое

UPD вопрос № 1 возможно, решится с помощью http://manpages.ylsoftware.com/dokuwiki/man/debian/start-stop-daemon_8
« Последнее редактирование: 01 Август 2009, 23:03:56 от Zloy_T »

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
или так http://linuxforum.ru/index.php?showtopic=92771 но убейте меня если я понимаю как составить скрипт

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
wait

Останавливает работу сценария до тех пор пока не будут завершены все фоновые задания или пока не будет завершено задание/процесс с указанным номером задания/PID процесса. Возвращает код завершения указанного задания/процесса. http://linuxland.itam.nsc.ru//misc/Shell/shell03/index.html#EXITSTATUSREF

Вы можете использовать команду wait для предотвращения преждевременного завершения сценария до того, как завершит работу фоновое задание.

Пример 11-23. Ожидание завершения процесса перед тем как продолжить работу
#!/bin/bash

ROOT_UID=0   # Только пользователь с $UID = 0 имеет привилегии root.
E_NOTROOT=65
E_NOPARAMS=66

if [ "$UID" -ne "$ROOT_UID" ]
then
  echo "Для запуска этого сценария вы должны обладать привилегиями root."
  exit $E_NOTROOT
fi

if [ -z "$1" ]
then
  echo "Порядок использования: `basename $0` имя-файла"
  exit $E_NOPARAMS
fi


echo "Обновляется база данных 'locate'..."
echo "Это может занять продолжительное время."
updatedb /usr &     # Должна запускаться с правами root.

wait
# В этом месте сценарий приостанавливает свою работу до тех пор, пока не отработает 'updatedb'.
# Желательно обновить базу данных перед тем как выполнить поиск файла.

locate $1

# В худшем случае, без команды wait, сценарий завершил бы свою работу до того,
# как завершила бы работу утилита 'updatedb',
# сделав из нее "осиротевший" процесс.

exit 0

Команда wait может принимать необязательный параметр -- номер задания/процесса, например, wait %1 или wait $PPID. См. таблицу идентификации заданий. http://linuxland.itam.nsc.ru//misc/Shell/shell03/index.html#JOBIDTABLE

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
или так как-то $ ps -ax -o "user comm pid" | grep -v root | sort | uniq -d -w 26

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
Код
#!/bin/bash
mount -t /program.sfs
exec program
wait


unmount -t /program.sfs
exit0

пока как-то так но на реальной железке не тестировал. А на виртуалке глючит, гад

Оффлайн DdShurick

  • Это Риччи
  • Активный участник
  • Ветеран
  • ****
  • Сообщений: 8635
  • Репутация: +187/-2
  • Старый чайник
 Да, это правильный путь. Вот реально работающий скрипт для avast.
Код
#!/bin/sh
cd /mnt/home
load_sfs avast4workstation-1.3.0.sfs
avastgui
wait

unload_sfs avast4workstation-1.3.0.sfs
exit 0
Спасибо за идею. А я полночи уламывал ps | grep progname и бестолку.
Моноблок Lenovo IdeaCentre c200 (Intel Atom D525, Intel GMA 3150, 2 Gb RAM) Richy64
Nettop Acer Aspire Revo R3610 (Atom N330, nVidia GeForce 9400, 3 Gb RAM) Richy64

Оффлайн Zloy_T

  • Почетный участник
  • Старожил
  • *
  • Сообщений: 326
  • Репутация: +74/-2
  • Автор темы
хотя надо еще порыть в сторону job, ps|grep
в идеале хорошо бы задействовать скрипт, который будет следить сразу за многими процессами и управлять несколькими сфс
Возможно, я ошибаюсь, но мне кажется, так будет меньше жрать памяти