gpt4 book ai didi

c - 如何正确使用pidfile库?

转载 作者:IT王子 更新时间:2023-10-29 00:21:23 37 4
gpt4 key购买 nike

我已经阅读了 pidfile 函数系列的手册页。但我真的不明白。正确的用法是什么?有更详细的例子吗?我想我理解 pidfile_open。但是我应该什么时候调用pidfile_writeprdfile_close?来自哪个过程? parent 还是 child ?我必须将哪些参数传递给这些函数?我想我可能缺乏一些 *nix 基础知识。

更新:

下面是来自 man pidfile 的示例。他们为什么 fork 两次?为什么是 pidfile_close?当我调用 pidfile_close 时,我可以启动另一个守护进程。这不是不需要的吗?

 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);

最佳答案

问题是你想在生成守护进程之前给出错误消息,而在生成守护进程之后你知道 PID 文件。

所以您通常在 fork 之前执行 pidfile_open,这使您有可能给出错误消息。 fork 后,您知道 pidfile 并且可以执行 pidfile_write。

关于c - 如何正确使用pidfile库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706956/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com