pidfile_open pidfile_write pidfile_close pidfile_remove - library for PID files handling
Lb libutil
The
pidfile_open ();
function opens (or creates) a file specified by the
Fa path
argument and locks it with the
flock(2)
system call.
If a file can not be locked, a PID of an already running daemon is returned in
the
Fa pidptr
argument (if it is not
NULL )
The function does not write process' PID into the file here, so it can be
used before
fork (Ns ing);
and exit with a proper error message when needed.
If the
Fa path
argument is
NULL
/var/run/ Ao progname Ac .pid
file will be used.
The
pidfile_write ();
function writes process' PID into a previously opened file.
The
pidfile_close ();
function closes a pidfile.
It should be used after daemon
fork (Ns s);
to start a child process.
The
pidfile_remove ();
function closes and removes a pidfile.
struct pidfh *pfh; pid_t otherpid, childpid; pfh = pidfile_open("/var/run/daemon.pid", 0600, &otherpid); if (pfh == NULL) { if (errno == EEXIST) { errx(EXIT_FAILURE, "Daemon already running, pid: %jd.", (intmax_t)otherpid); } /* If we cannot create pidfile from other reasons, only warn. */ warn("Cannot open or create pidfile"); } if (daemon(0, 0) == -1) { warn("Cannot daemonize"); pidfile_remove(pfh); exit(EXIT_FAILURE); } pidfile_write(pfh); for (;;) { /* Do work. */ childpid = fork(); switch (childpid) { case -1: syslog(LOG_ERR, "Cannot fork(): %s.", strerror(errno)); break; case 0: pidfile_close(pfh); /* Do child work. */ break; default: syslog(LOG_INFO, "Child %jd started.", (intmax_t)childpid); break; } } pidfile_remove(pfh); exit(EXIT_SUCCESS);
The
pidfile_open ();
function may also fail and set
errno
for any errors specified for the
fstat(2),
open(2),
and
read(2)
calls.
The
pidfile_write ();
function will fail if:
The
pidfile_write ();
function may also fail and set
errno
for any errors specified for the
fstat(2),
ftruncate(2),
and
write(2)
calls.
The
pidfile_close ();
function may fail and set
errno
for any errors specified for the
close(2)
and
fstat(2)
calls.
The
pidfile_remove ();
function will fail if:
The
pidfile_remove ();
function may also fail and set
errno
for any errors specified for the
close(2),
flock(2),
fstat(2),
write(2),
and
unlink(2)
calls.
The code and manual page was written by An Pawel Jakub Dawidek Aq pjd@FreeBSD.org .
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |