Для чого потрібні файли pid та lock?


75

Я часто бачу, що програми задають файли pid та lock. І я не зовсім впевнений, що вони роблять.

Наприклад, під час компіляції nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Чи може хтось пролити світло на цей?

Відповіді:


86

pid-файли записуються деякими програмами для запису свого ідентифікатора процесу під час їх запуску. Це має кілька цілей:

  • Це сигнал іншим процесам та користувачам системи про те, що певна програма запущена або принаймні успішно запущена.
  • Це дозволяє написати сценарій дуже легко перевірити, чи він запущений, і видати звичайну killкоманду, чи хочеться її закінчити.
  • Це дешевий спосіб для програми перевірити, чи попередній запущений екземпляр її не завершився успішно.

Лише наявність pid-файлу не гарантує, що конкретний ідентифікатор процесу працює, звичайно, тому цей метод не є 100% надійним, але "досить хорошим" у багатьох випадках. Перевірка наявності певного PID в таблиці процесів не є повністю портативною для UNIX-подібних операційних систем, якщо ви не хочете залежати від psутиліти, яку, можливо, не бажано викликати в усіх випадках (і я вважаю, деякі операційні системи, схожі на UNIX) впроваджувати по- psрізному).

Файли блокування використовуються програмами для забезпечення двох (добре сприйнятих) окремих екземплярів програми, яка може працювати одночасно в одній системі, не отримуючи доступу до чогось іншого одночасно. Ідея полягає в тому, щоб програма отримала доступ до свого ресурсу, вона перевіряє наявність файлу блокування, і якщо файл блокування існує, помилка або вичікують його, або чекають, поки він вийде. Коли його не існує, програма, яка хоче «придбати» ресурс, створює файл, і тоді інші екземпляри, які можуть з’явитися пізніше, будуть чекати, коли цей процес буде виконаний з ним. Звичайно, це передбачає, що програма "придбання" блокування насправді звільняє її і не забуває видалити файл блокування.

Це працює, тому що файлова система в усіх UNIX-подібних операційних системах здійснює серіалізацію , а значить, лише одна зміна файлової системи насправді відбувається в будь-який момент часу. На зразок замків із базами даних тощо.


1
Це правильно, якщо тільки файл блокування не видалено вручну. Програвач VMWare проявляє таке поведінку, наприклад, якщо програвач VMWare програє, ви повинні видалити .lckфайл у каталозі VM, інакше він скаже вам, що він використовується, коли ви намагаєтеся його запустити.
ЛоуренсC

1
Що з Windows? Як він обробляє файли .lock? Зрештою, це не схоже на Unix.
SarahofGaia

2
Я не думаю, що звичайно для програм Windows працюють таким чином. Єдині програми з такою поведінкою, які я бачив, - це порти від Unix / Linux
HaMster,

2
LawrenceC, Re " Коли його не існує, програма, яка хоче" придбати "ресурс, створює файл "; Але є відповідні функції, спеціально побудовані для такої синхронізації. Чому б не покластися на ці функції замість використання "файлового хаку"?
Pacerier

1
@Pacerier - Блокування файлів таким чином, ймовірно, частіше використовується такими речами, як скрипти скриптів або програми, які можуть взаємодіяти зі скриптами оболонки, оскільки оболонки Unix / Linux взаємодіють з файловою системою дуже легко, порівняно з іншими примітивами синхронізації. Файли також легко зберігаються в різних процесах. Програма з високою продуктивністю очевидно, мабуть, дасть перевагу нативним примітивам ОС проти файлів, щоб синхронізувати речі всередині або навіть проти інших процесів, які не є оболонками.
LawrenceC

14

Ці файли часто використовуються демонами, які слід запускати лише один раз у системі. Файл PID зазвичай містить ідентифікаційний номер процесу вже запущеної та запущеної програми, якщо такий існує. Крім того, коли він запускається, він створює файл блокування. Поки існує файл блокування, він не запускатиме ще один без втручання користувача. Якщо файл блокування існує, а ідентифікатор процесу, згаданий у файлі pid, не працює, демон вважається в "мертвому" стані, тобто він повинен працювати, але, ймовірно, не відбувається через збій або неправильне відключення . Це може ініціювати спеціальний сценарій запуску / перезавантаження для деяких програм. Якщо правильно вимкнути його, вилучите файл блокування.


+1 Пояснення використання файлів блокування та файлу pid.
Кайл Крулл

@Caleb - Будь ласка, поясніть, чому будуть використовуватися як PID-файл, так і файл блокування. Здається, PID-файл був би достатнім. Якщо файл PID існує, PID можна перевірити, чи перевіряється процес, просто виконуються менше кроків, ніж перевірка блокування файлів, перевірка PID-файлу, а потім перевірка існування процесу.
MVaughan

@MVaughan Щоб уникнути перегонів, якщо нічого іншого. Деякі додатки використовують час, коли PID все ще потребує, але може відмовитись від блокування. Але на більш фундаментальному рівні, якщо ви перевантажуєте один файл для обох операцій, ви відкриваєте двері до збоїв, таких як збій, залишаючи непослідовний стан у системі.
Калеб

8

Файл PID міститиме ідентифікатор процесу запущеного процесу. Це має різні види використання; ви можете прочитати його і перевірити, чи процес все ще працює, і вжити відповідних дій або прочитати його і вбити процес.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.