Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.

PIDFILE(3)                 Library Functions Manual                 PIDFILE(3)

     pidfile, pidfile_lock, pidfile_read, pidfile_clean - write a daemon pid

     System Utilities Library (libutil, -lutil)

     #include <util.h>

     pidfile(const char *path);

     pidfile_lock(const char *path);

     pidfile_read(const char *path);


     pidfile() and pidfile_lock() create and lock a file containing the
     process ID of the calling program.  The pid file can be used as a quick
     reference if the process needs to be sent a signal.  The pid file is
     truncated and removed automatically when the program exits, unless the
     program receives a fatal signal.

     If path is NULL or a plain basename (a name containing no directory
     components), the pid file is created in the /var/run directory.  The file
     name has the form /var/run/basename.pid.  The basename part is either the
     value of path if it was not NULL, or the program name as returned by
     getprogname(3) otherwise.

     If path is an absolute or relative path (i.e. it contains the `/'
     character), the pid file is created in the provided location.

     If called with a new path, pidfile() and pidfile_lock() will remove the
     old pid file.

     The pid file is truncated, so these functions can be called multiple
     times and allow a child process to take over the lock.

     pidfile_read() will read the last pid file created, or specified by path,
     and return the process ID it contains.

     pidfile_clean() will ftruncate(2), close(2), and unlink(2) the last
     opening pid file if, and only if, the current process wrote it.  This
     function should be called if the program needs to call _exit(2) (such as
     from a signal handler) and needs to clean up the pid file.

     pidfile() and pidfile_clean() returns 0 on success and -1 on failure.

     pidfile_lock() returns 0 on success.  Otherwise, the process ID who owns
     the lock is returned and if that cannot be derived then -1 is returned.

     pidfile_read() returns the process ID if known, otherwise -1.

     The pidfile() and pidfile_lock() functions will fail if:

     [EEXIST]           Some process already holds the lock on the given pid
                        file, meaning that a daemon is already running.

     [ENAMETOOLONG]     Specified pidfile's name is too long.

     flock(2), atexit(3)

     The pidfile() function call appeared in NetBSD 1.5.  Support for creating
     pid files in any arbitrary path was added in NetBSD 6.0.

     The pidfile_lock(), pidfile_read(), and pidfile_clean() function calls
     appeared in NetBSD 8.

     pidfile() and pidfile_lock() use atexit(3) to ensure the pid file is
     cleaned at program exit.  However, programs that use the _exit(2)
     function (for example, in signal handlers) will not trigger this
     behaviour and should call pidfile_clean().  Like-wise, if the program
     creates a pid file before fork(2)ing a child to take over, it should use
     the _exit(2) function instead of returning or using the exit(3) function
     to ensure the pid file is not cleaned.

NetBSD 9.99                     April 10, 2016                     NetBSD 9.99