716

Взаимное исключение на shell

Вот нашел 2 варианта1 вариантMy_pid=$$print $My_pid >> temp.fileread input_pid &2 "aquired lock; continuing" # Remove lock directory when script terminates trap 'rmdir "$lockname"' 0 trap "exit 2" 1 2 3 15 else echo >&2 "lock already held" echo >&" "another script instance running?" exit 1 fiThis can be extended to e.g. write the current process id to a file in thelock directory. This way another instance can check if the process thataquired the lock is still running.Варианты в целом похожие и переделать их вроде можно таким образом, чтобы вместо выхода при "lock already held" делались новые попытки этот "lock" захватить .Есть у кого другие варианты, может более изящные?И еще одна проблема - например, скрипт захватывает блокировку и умирает, не удалив нужный файл или директорию. Тогда кто-то должен проверять жив ли еще скрипт, установивший блокировку и в противном случае удалять этот файл/директорию. Эту операцию возложить на тот же скрипт, насколько я понимаю, не получится - снова возникнут проблемы с необходимостью взаимного исключения. Или я ошибаюсь?
0