psilogic: (wpriz)
[personal profile] psilogic
А вот просветите прожженного вындузоида насчет одной вещи.

Есть ли в линухе хоть какой-нибудь ресурс, который саморазлочивается при грубом убийстве программы? Хочется сделать защиту от одновременного запуска двух instance. Перепробовал уже open(O_EXCL), flock, lockf, shm_open(O_EXCL), sem_open(O_EXCL), sem_trywait - всё либо жидко срёт на локи, либо виснет (lockf(...F_TEST...)), так как, видите ли, файловая система недоразвитая (nfs), либо в случае убиения через kill -9 оставляет ресурс в состоянии, неотличимом от залоченного.

Щито делать? Неужели уних в этом отношении дохлее выньды?

З.Ы. Есть, конечно, сокеты, но это значит юзать "магический номер" порта, что, мягко гойворя, не приветствуется корпоративными традициями кодопейсательства...

З.Ы.Ы. Спасибо всем за мозговой штурм, в конце-концов все заработало по принципу:
1) проверяем, есть ли нужный файл /tmp/чтототам.pid, читаем оттуда pid
2) если есть - проверяем запущен ли такой процесс через signal(pid, 0)
3) если запущен - дополнительно проверяем через readlink(..."/proc/<pid>/exe"...), что этот процесс имеет то же имя, что и текущий

З.Ы.Ы.Ы причины, почему блокируется lockf(...F_TEST...) и flock(...|LOCK_NB...) так и остались невыясненными: блокируется оно даже и не на nfs

Date: 2015-08-17 05:43 pm (UTC)
From: [identity profile] psilogic.livejournal.com
что есть пидфайл и как он спасет аццов демократии?

Date: 2015-08-17 05:48 pm (UTC)
From: [identity profile] theiced.livejournal.com
flock + записать пид залочившего в файл. при попытке нового запуска кроме самого пидфайла проверять ещё есть ли такой процесс. можно ещё ему сигналов послать на предмет жив ли он, всё вот это.

непонятно что ты хочешь сделать вообще говоря, но тебе надо взять любого линупсового демона, посмотреть чего у него внутре и делать так же.

Date: 2015-08-17 05:56 pm (UTC)
From: [identity profile] psilogic.livejournal.com
послать сигнал на предмет сдох ли он - вот эта вот идея выглядит очень антересно
а не подскажет ли уважаемый дон, который из сигналов считается "кошерным" для этой цели?
SIGUSR1 с предварительным signal(SIGUSR1, SIG_IGN)?

что я хочу - защиту от одновременного запуска двух instance, которая не требует танцев с бубном, если прога йопнулась или была йопнута через kill -9
Edited Date: 2015-08-17 05:58 pm (UTC)

Date: 2015-08-17 06:03 pm (UTC)
From: [identity profile] theiced.livejournal.com
я ж не линуксоид, откуда я помню как это говно внутре в деталях :)

Date: 2015-08-17 06:06 pm (UTC)
From: [identity profile] psilogic.livejournal.com
ааа...
ну все равно хоть какой-то выход, спасибо! :)

Date: 2015-08-17 10:24 pm (UTC)
From: [identity profile] afa-at-work.livejournal.com
ххе
"а руки то помнят!"
Page generated Oct. 7th, 2025 01:16 am
Powered by Dreamwidth Studios