Pregunta

¿Dónde puedo encontrar un respetado referencia que detalla el manejo adecuado de los archivos PID en Unix?

En los sistemas operativos Unix, es una práctica común para “bloquear” un programa (a menudo un demonio) mediante el uso de un archivo especial de bloqueo:. El archivo PID

Este es un archivo en un lugar predecible, a menudo ‘/var/run/foo.pid’. El programa se supone que el registro cuando se inicia si existe el archivo PID y, si el archivo no existe, salida con un error. Así que es una especie de asesor, mecanismo de bloqueo de colaboración.

El archivo contiene una sola línea de texto, siendo la ID de proceso numérico (de ahí el nombre “archivo PID”) del proceso que ocupa actualmente la cerradura; esto permite una manera fácil de automatizar el envío de una señal al proceso que mantiene el bloqueo.

Lo que no puedo encontrar es una buena referencia sobre el comportamiento esperado o “mejores prácticas” para el manejo de archivos de PID. Hay varios matices: cómo bloquear realmente el archivo (no se molestan en utilizar el núcleo qué sobre las incompatibilidades de plataforma???), La manipulación viejos bloqueos (silencio eliminarlos cuando para comprobar??), El momento exacto para adquirir y liberar el bloqueo , y así sucesivamente.

¿Dónde puedo encontrar un respetado, de referencia más autorizada- (idealmente en el nivel de W. Richard Stevens) para este pequeño tema?

¿Fue útil?

Solución

Por lo que yo sé, archivos PID son una convención en lugar de algo que se puede encontrar una fuente respetada, sobre todo con autoridad para. El más cercano que pude encontrar es esta sección del estándar de jerarquía del sistema de archivos.

Esta biblioteca Perl podría ser útil, ya que parece que la autor al menos ha pensado en algunos problemas que pueden surgir.

Creo que los archivos en / var / run a menudo son manejados por los mantenedores de distribuciones en lugar de demonios de autores, ya que es la distro mantenedores responsabilidad de asegurarse de que todos los scripts de inicio juegan bien juntos. Revisé documentación para desarrolladores de Fedora de Debian y de y no podía encontrar ningún directrices detalladas, pero que podría ser capaz de obtener más información sobre listas de distribución de sus desarrolladores.

Otros consejos

En primer lugar, en todos los UNIXes modernas /var/run no persiste en los reinicios.

El método general de manejar el archivo PID es crearlo durante la inicialización y eliminarlo de cualquier salida, ya sea normal o manejador de señales.

Hay dos formas canónicas para crear atómicamente / Salida para el archivo. El principal de estos días es abrirlo con la bandera O_EXCL: si el archivo ya existe, la llamada falla. La forma más antigua (obligatorio en los sistemas sin O_EXCL) es crearlo con un nombre aleatorio y enlazar con él. El enlace fallará si el destino existe.

La programación Linux Interfaz , sección 55.6 " ejecución de una sola instancia de un programa " que se basa en la aplicación pidfile en Stevens' Programación Unix Red, v2.

Tenga en cuenta también que la ubicación del archivo pid es generalmente algo manejado por la distro (a través de un guión de inicio), por lo que un demonio bien escrita tendrá un argumento de línea de comandos para especificar el archivo pid y no permitir que este sea anulado accidentalmente por una archivo de configuración. También debe controlar correctamente un archivo pid rancio por sí mismo (O_EXCL no debe utilizarse). fcntl () el bloqueo de archivos se debe utilizar -. Usted puede asumir que pidfile de un demonio se encuentra en un sistema de archivos local (no NFS)

En función de la distribución, es en realidad el guión de inicio que se encarga de la pidfile. Se comprueba la existencia en el arranque, elimina al parar, etc. No me gusta hacerlo de esa manera. Escribo mis propios scripts de inicio y no uso normalmente las funciones stanard init.

Un programa bien escrito (demonio) tendrá algún tipo de fichero de configuración diciendo que esto pidfile (si existe) debe ser escrito. También se encargará de establecer los gestores de señales para que el archivo PID se limpia a la salida normal o anormal, cada vez que una señal puede ser manejado. El archivo PID da entonces el guión de inicio el PID correcto por lo que se puede detener.

Por lo tanto, si el pidfile ya existe cuando se inicia, es un muy buen indicador para el programa que previamente se estrelló y se debe hacer algún tipo de esfuerzo de recuperación (si es aplicable). De alguna manera que la lógica disparar en el pie si usted tiene el guión de inicio en sí la comprobación de la existencia de la EIP, o desenlazándolo.

En cuanto al espacio de nombres, se debe seguir el nombre del programa. Si usted está comenzando 'foo-daemon', sería foo-daemon.pid

También debe explorar / var / lock / SUBSYS, sin embargo, que se utiliza sobre todo en los sabores de Red Hat.

El paquete systemd en Red Hat 7 proporciona una página daemon(7) hombre con la línea de cabecera "Escritura y del sistema de envasado demonios."

Esta página del manual discute tanto "viejo estilo" (SysV) y "nuevo estilo" (systemd) daemonization. En el nuevo estilo, SystemD sí ocupa de los expedientes PID para usted (si está configurado para hacerlo). Sin embargo, en el viejo estilo, la página hombre tiene esto que decir:

  
      
  1. En el proceso de demonio, escribir el daemon PID (devuelto por getpid ())          a un archivo PID, por ejemplo /run/foobar.pid (para un demonio hipotética          "Foobar") para asegurar que el demonio no se puede iniciar más de una vez.          Esto se debe implementar de forma gratuita a la carrera para que el archivo es PID          sólo se actualizan cuando se verifica al mismo tiempo que el PID          previamente almacenada en el archivo PID ya no existe o pertenece a una          proceso extranjera.
  2.   

También puede leer este hombre la página línea .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top