для чего нужны файлы pid и lock?

<p>я часто вижу, что программы указывают файлы pid и lock. и я не совсем уверен, что они делают.</p><p>например, при компиляции nginx:</p><pre><code>--pid-path=/var/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ </code></pre><p>может кто-нибудь пролить свет на этот?</p>

<p>pid-файлы пишутся некоторыми программами для записи их идентификатора процесса во время их запуска. это имеет несколько целей:</p><ul> <li>это сигнал другим процессам и пользователям системы, что эта конкретная программа запущена или, по крайней мере, успешно запущена.</li> <li>это позволяет очень легко написать скрипт, проверить, запущен ли он, и выполнить простую команду <code>kill</code>, если он хочет завершить его.</li> <li>для программы это дешевый способ узнать, не завершился ли предыдущий запущенный экземпляр программы успешно.</li> </ul><p>разумеется, наличие pid-файла не гарантирует, что этот конкретный идентификатор процесса работает, поэтому этот метод не на 100% надежен, но во многих случаях "достаточно хорош". проверка наличия определенного pid в таблице процессов не является полностью переносимой в unix-подобных операционных системах, если только вы не хотите зависеть от утилиты <code>ps</code>, которую может быть нежелательно вызывать во всех случаях (и я считаю, некоторые unix-подобные операционные системы по-разному реализуют <code>ps</code>).</p><p>файлы блокировки используются программами для обеспечения того, чтобы два (с хорошим поведением) отдельных экземпляра программы, которые могут работать одновременно в одной системе, не обращались к чему-то другому одновременно. идея состоит в том, что прежде чем программа получит доступ к своему ресурсу, она проверяет наличие файла блокировки, и, если файл блокировки существует, либо выдает ошибку, либо подождите, пока она не исчезнет. когда он не существует, программа, желающая "приобрести" ресурс, создает файл, а затем другие экземпляры, которые могут встретиться позже, будут ожидать завершения этого процесса с ним. конечно, это предполагает, что программа, "получающая" блокировку, фактически снимает ее и не забывает удалить файл блокировки.</p><p>это работает, потому что файловая система во всех unix-подобных операционных системах обеспечивает <em>сериализация</em>, что означает, что в любой момент времени в действительности происходит только одно изменение файловой системы. вроде как блокировки с базами данных и тому подобное.</p>

<p>эти файлы часто используются демонами, которые должны запускаться в системе только один раз. файл pid обычно содержит идентификационный номер процесса уже запущенной и запущенной программы, если таковая существует. кроме того, когда он запускается, он создает файл блокировки. пока существует файл блокировки, он не сможет запустить другой без вмешательства пользователя. если файл блокировки существует, а идентификатор процесса, указанный в файле pid, не запущен, демон считается находящимся в "мертвом" состоянии, то есть он должен работать, но, вероятно, не из-за сбоя или неправильного завершения работы , это может инициировать специальный сценарий запуска/перезапуска для некоторых программ. правильное выключение приведет к удалению файла блокировки.</p>

<p>файл pid будет содержать идентификатор процесса запущенного процесса. это имеет различные применения; вы можете прочитать его и проверить, что процесс все еще работает, и предпринять соответствующие действия или прочитать его и завершить процесс.</p><p>файл блокировки, скорее всего, зависит от конкретного приложения. файлы блокировки используются для указания того, что какой-то ресурс используется и процесс, который хочет получить доступ, должен дождаться освобождения ресурса, прежде чем продолжить.</p>