Bug 7518

Summary: Wine-tests: доработать блокировку от повторного запуска
Product: [Свободные проекты (Open source projects)] WINE-tests Reporter: Виталий Перов <vitperov>
Component: ОбщееAssignee: Виталий Перов <vitperov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: amorozov, baraka, lav
Version: не указана   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 6264    
Deadline: 2011-09-01   

Description Виталий Перов 2011-08-09 18:49:37 MSK
Сейчас для блокировки скрипта от повторного запуска применяется файл lock.

При некорректном завершении скрипта (например при зависании компьютера), файл остаётся. И повторный запуск уже не возможен, пока вручную не будет удалён файл блокировки.

Возможных решений два:
1) Записывать в файл id процесса, и при повторном запуске проверять жив ли этот процесс.
2) Смотреть время создания файла. Если со времени создания прошло 2 или 3 часа, то файл удалять.
Comment 1 Александр Морозов 2011-08-09 19:05:56 MSK
Из выше перечисленных мне больше первый вариант нравится.
Ещё можно на файл lock ставить блокировку.
Comment 2 Виталий Перов 2011-08-09 19:58:15 MSK
Тут ещё проблема с реализацией на питоне.

Вариант со временем создания файла реализуется стандартными средствами питона при помощи функции os.stat(). Кроме того, эта функция является кроссплатформенной.

А вот для того, чтобы узнать жив ли блокирующий процесс, стандартных средств нет.
Можно запустить при помощи os.system() соответствующую комманду shell, а потом парсить её вывод.
Comment 3 Виталий Перов 2011-08-09 22:37:47 MSK
Начал реализацию.

Вместо запуска 'ps a', и поиска требуемого pid, думаю лучше смотреть напрямую в /proc.

Ещё нужно проверять имя программы. Может так получиться, что после загрузки компьютера процесс с таким pid будет существовать, но принадлежать совсем другой программе.
Comment 4 Виталий Перов 2011-08-10 18:08:22 MSK
Сделал блокировку через команду 'ps -p id -o comm=', которая сообщает имя процесса.
Comment 5 Виталий Перов 2011-08-10 19:04:01 MSK
Теперь появилась новая проблема:
При запуске разных скриптов имя процесса может быть разным.
Чтобы разные скрипты не работали с репозиторием одновременно, надо как-то учитывать их имена.

Исправил. Работает.
Для этого в конфиге теперь придётся добавлять имена новых скриптов.