Re: CD/DVD ROM eject: решение (или грабли?) вместо ivman
On 2006.03.01 at 12:19:50 +0300, Mikhail Ramendik wrote:
> Ключик -f в данном, случае, к сожалению, не срабатывает - я проверял.
>
> Но я тут подумал, что падение CD/DVD-ROM в device not ready _обязано_
> корректно отрабатываться в любом случае, а если не отрабатывается - это баг
> (не знаю, в iso9660 fs или нет...)
Боюсь что в VFS layer.
> > Затем что если ты вытаскиваешь диск, то shell у которого CWD на этом диске
> > тебе уже не нужен. shell-ы это вообще расходный материал - для каждого
> > скрипта новая копия запускается.
>
> А если в этом шелле сидел совсем-другой-юзер?
То тогда вообще всё плохо. В многопользовательских системах (в смысле
где реально работают несколько живых пользователей )не должно
допускаться произвольное выдергивание диска из файловой системы. Либо
этот диск должен быть в эксклюзивном пользовании того пользователя,
который имеет физический доступ к дисководу.
Т.е. как раз в ситуации, когда на машине бывает несколько живых
пользователей, необходимость явным образом размонтировать диск является
разумной предусторожностью от того, чтобы пользователь, имеющий доступ к
дисководу, не помешал нечаянно работать другим пользователям.
Кстати, в этом случае вариант с сигналами срабатывает. Только делать его
нужно чуточку посложнее:
1. Сигналы посылать от имени пользователя-владельца консоли.
2. Диск размонтировать и отдавать только в случае если все процессы
получили сигнал. Если сигнал послать не дали (Permission denied) -
выяснить кому принадлежит процесс, захвативший диск и сообщить об этом
пользователю.
> > А если у тебя есть файлменеджер, который держит директорию на съемном
> > носителе, и не отрабатывает корректно сигнал, то такой файлменеджер
> > убивать надо не сигналом а aptitude remove.
>
> Какой сигнал? Разве есть сигнал, означающий "из-под тебя убрали файловую
> систему"?
Какой угодно. Хоть SIGHUP.
>
> Сценарий при этом варианте:
>
> login: xxx
> password: xxx
> [insert disk]
> $ cd /mnt/cdrom
> [disk automounted]
> $ cp * ~/incoming
> [copying...]
> $
> [eject disk, logon shell crashed]
> login:
> [user: WTF?!?!]
Пользователь, работающий с текстовой консоли, это не пользователь, а
системный администратор. Он должен своей головой думать. А в рамках
типичной GUI-системы процессом-лидером пользовательской сессии является
window manager, у которого cwd в ${HOME}.
> /mnt/cdrom$ emacs
>
> [long work..]
> [eject CD]
> [emacs crashes as parent is killed!]
>
> У shell'а ещё и дети есть...
Ну, если shell прибили не SIGHUP-ом, то детям это не мешает.
Reply to: