[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: