¿Para qué sirven los archivos pid y lock?

Pregunta:

A menudo veo que los programas especifican archivos pid y de bloqueo. Y no estoy muy seguro de lo que hacen.

Por ejemplo, al compilar nginx:

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

¿Alguien puede arrojar algo de luz sobre esto?

Respuesta:

Algunos programas escriben archivos pid para registrar su ID de proceso mientras se inician. Esto tiene múltiples propósitos:

  • Es una señal para otros procesos y usuarios del sistema de que ese programa en particular se está ejecutando, o al menos se inició con éxito.
  • Le permite a uno escribir un script realmente fácil para verificar si se está ejecutando y emitir un comando de kill simple si uno quiere terminarlo.
  • Es una forma económica para que un programa vea si una instancia anterior en ejecución no se cerró correctamente.

La mera presencia de un archivo pid no garantiza que ese ID de proceso en particular se esté ejecutando, por supuesto, por lo que este método no es 100% infalible, pero "lo suficientemente bueno" en muchos casos. Verificar si existe un PID en particular en la tabla de procesos no es totalmente portátil en sistemas operativos similares a UNIX a menos que desee depender de la utilidad ps , que puede no ser deseable llamar en todos los casos (y creo que algunos sistemas operativos similares a UNIX los sistemas implementan ps diferente de todos modos).

La idea con los archivos de bloqueo es la siguiente: el propósito es que dos instancias separadas (con buen comportamiento) de un programa, que pueden estar ejecutándose simultáneamente en un sistema, no accedan a otra cosa al mismo tiempo. La idea es que antes de que el programa acceda a su recurso, verifique la presencia de un archivo de bloqueo y, si el archivo de bloqueo existe, salga por error o espere a que desaparezca. Cuando no existe, el programa que desea "adquirir" el recurso crea el archivo, y luego otras instancias que podrían aparecer más adelante esperarán a que este proceso se complete con él. Por supuesto, esto supone que el programa que "adquiere" el bloqueo, de hecho, lo libera y no se olvida de eliminar el archivo de bloqueo.

Esto funciona porque el sistema de archivos en todos los sistemas operativos similares a UNIX impone la serialización , lo que significa que solo ocurre un cambio en el sistema de archivos en un momento dado. Una especie de cerraduras con bases de datos y demás.

Los sistemas operativos o las plataformas en tiempo de ejecución suelen ofrecer primitivas de sincronización y, por lo general, es una mejor decisión utilizarlas en su lugar. Puede haber situaciones como escribir algo que esté destinado a ejecutarse en una amplia variedad de sistemas operativos pasados ​​y futuros sin una biblioteca confiable para abstraer las llamadas (como posiblemente scripts basados ​​en sh o bash destinados a funcionar en una amplia variedad de versiones de Unix) – en ese caso, este plan puede ser un buen compromiso.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım