diff --git a/daemon.c b/daemon.c index 1643200..a1be594 100644 --- a/daemon.c +++ b/daemon.c @@ -247,11 +247,13 @@ int main(int argc, char *argv[]) { int pidFile = -1; if (pidPath) { - pidFile = open( - pidPath, O_WRONLY | O_CREAT | O_EXLOCK | O_CLOEXEC, 0600 - ); + pidFile = open(pidPath, O_WRONLY | O_CREAT | O_CLOEXEC, 0600); if (pidFile < 0) err(EX_CANTCREAT, "%s", pidPath); + error = flock(pidFile, LOCK_EX | LOCK_NB); + if (error && errno != EWOULDBLOCK) err(EX_IOERR, "%s", pidPath); + if (error) errx(EX_CANTCREAT, "%s: file is locked", pidPath); + error = ftruncate(pidFile, 0); if (error) err(EX_IOERR, "%s", pidPath); }