Один демон, который я написал, открыл сокет домена UNIX для регулярного взаимодействия клиент-демон.Затем другие экземпляры проверяли, могут ли они подключиться к этому сокету.Если они могли, другой экземпляр в настоящее время работает. Редактировать: Как отмечает @psmears, есть условие гонки.Другие экземпляры должны просто попытаться создать тот же сокет прослушивания.Это не удастся, если он уже используется.
Блокировка файлов работает чаще, чем этот особый случай.Вы можете создать (пустой) файл в хорошо известном месте, а затем использовать блокировки файлов, например, с помощью fcntl(2)
и F_SETLK
и F_GETLK
, чтобы установить блокировку для этого файла или определить, удерживается ли блокировка.Может не работать над NFS.Блокировки очищаются, когда ваш процесс умирает, поэтому это должно работать и переносимо (по крайней мере, для HP-UX).Некоторые демоны любят выгружать свой pid в этот файл, если они решают, что в данный момент не запущен ни один другой экземпляр.