Принцип ее работы прост: для каждого процесса она создает файл и вешает на него lock. Как только процесс завершается, лок пропадает. Лок также пропадает в случае внезапной смерти процесса, и нет необходимости проверять pid на существование или делать другие телодвижения. Если процесс запускается повторно, а лок-файл еще не освободился, работа скрипта прерывается и выдается сообщение в STDERR.
Ниже будут приведены примеры для разных ОС
Linux
flock, lockrun
FreeBSD/OpenBSD
lockf, lockfile (из пакета procmail)
Solaris
lockrun
Ниже некоторые комментарии, касательно утилит, которые я нашёл в одной из рассылок. Привожу цитаты:
lockf тем и хороша, что залипания у неё нет. Если процесс умер,
ядерный flock снимается сам. Ну и для крона крайне вкусен таймаут
(если запускаешь раз в минуту – как раз ставь таймаут в минуту).Для работы с FS, где flock() невозможен (старые NFS и т.п.) – есть
готовая тулза shlock (изначально – из комплекта cnews). Она не может
обеспечить идеальность, но пытается проверять все реально
отрабатываемые случаи.
PS. Часть информации взято с ресурса habrahabr.ru