Jump to content

Recommended Posts

Posted

Где бы почитать про сабж? В частности меня интересует, гарантируется ли уникальность PID в течение какого-либо интервала времени?

Допустим я запустил процесс, зафиксировал его pid и периодически проверяю, живой ли этот процесс.

Но не может быть так, что в периоде между проверками мой процесс помрет, и запустится другой процесс, но с таким же pid?

Posted

Сквозная нумерация , по порядку , по кругу.

Как сделает полный круг возможно повторное использование.

По крайней мере до ядра 3

 

Windows аналогично

Posted

BTW, в Win7 максимальный размер записи HANDLES (откуда берутся и PID) стал DWORD, то есть столкнуться с дублями PID стало практически нереально (практически больше 200 000 я не видел).  В Unix дефолтом максимальный номер 32768 (15 бит), но тоже можно задрать размерность до 22 бит (опять же практически нереально исчерпать на практике) - гуглите pid_max

Posted

Многие дистрибутивы (или патчи для ядра) борются с предсказанием pid - генерят случайные pid.

Posted

гарантия уникальности только в смысле что ОДНОВРЕМЕННО 2-х процессов с одинаковый пид не бывает.  Но после смерти процесса его пид имеет право быть назначен следующему хоть сразу (если цикл дошел). Увеличение kernel.pid_max (kern.pid_max итд) только снижает вероятность такого переиспользования, т.к. увеличивает цикл.  в линуксе на пятом ядре у меня kernel.pid_max = 4194304. Во фре 99999 уже с 8 версии или даже раньше. во фре еще можно сделать kern.randompid > 1 тогда новый пид будет не +1 а +случайное число от 1 до kern.randompid. Для линукса в ядро вроде не принесли такое же, но патчи есть и вроде как есть дистрибутивы с подобной функциональностью...

 

Posted

Мне будет достаточно, если в течение какого-то времени (скажем часа) PID гарантированно не повториться.

Но как я понял, такой гарантии не будет, можно только снизить вероятность, увеличив pid_max.

А рандомизация pid эту вероятность скорее даже повысит.

 

Тогда нужно дополнительно проверить, соответствует ли pid искомому процессу.

Разумеется можно проверять имя процесса, но это не гарантия.

Думаю, что комбинацию pid+comm+lstart можно считать уникальной.

Posted

Так не в файле дело.

Процесс стартует, его идентификатор в pid-файл сохраняется.

А потом процесс вылетает аварийно, а файл остается.

А если потом новый процесс тот же pid получит, как понять, что было аварийное завершение?

Только что сохранять помимо pid еще и дату/время старта процесса.

Posted

Ну, в systemd и pid-файл не нужен, он и так отловит падение процесса, и на это событие можно повесить нужные задания.

У меня сервер без systemd. Да и вообще, интересно автономное решение, академический такой интерес.

Posted
1 час назад, alibek сказал:

Э... Это если процесс свой.

А если чужой и он lock-файлов не держит?

Еcли процесс не форкается, то flock есть не только (2) но и (1) (ну или (3)и(8) на более других ОС :) 

man 1 flock

flock [options] <file|directory> <command> [command args]

 

есть pwait

 

Есть так же всякие пускалки типа daemon, daemontools или, как тут уже сказали про, не к ночи будь помянут. systemd, умеет пускать как с пид файлом так и без, как форкающегося так и не форкающегося, как перезапускать, так и запускать чтото третье по факту падения.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.