【发布时间】:2013-06-13 03:55:35
【问题描述】:
我已成功创建了一个 C 程序,该程序运行一个无限循环,等待通过套接字进行连接。 我想让它成为一个守护进程并能够启动和停止它。我该怎么做?我应该对我的代码进行哪些更改才能在后台运行?
【问题讨论】:
-
阅读
APUE, Stevens and Rago, chapter 13, Daemon Processes。 -
您的程序在哪个操作系统上运行?
我已成功创建了一个 C 程序,该程序运行一个无限循环,等待通过套接字进行连接。 我想让它成为一个守护进程并能够启动和停止它。我该怎么做?我应该对我的代码进行哪些更改才能在后台运行?
【问题讨论】:
APUE, Stevens and Rago, chapter 13, Daemon Processes。
成为守护进程所需的经典任务是:
fork()并让父退出,这样该进程就不是进程组长了;/dev/null;setsid() 使进程成为没有控制终端的新会话的会话组负责人。没有错误检查:
chdir("/);
if (fork() > 0)
_exit();
close(0);
close(1);
close(2);
open("/dev/null", O_RDWR);
dup(0);
dup(0);
setsid();
在 Linux 上,glibc 提供了一个 daemon() 辅助函数来完成这些任务。
【讨论】:
要将 c 程序作为守护程序运行,您需要执行以下步骤。
// Create child process
process_id = fork();
//unmask the file mode
umask(0);
//change the directory as your home directory
strcpy(home,"HOME");
home=getenv(home);
chdir(home) ;
//set new session
sid = setsid();
close(STDIN_FILENO); open("/dev/null", O_RDWR);
close(STDOUT_FILENO); open("/dev/null", O_RDWR);
close(STDERR_FILENO); open("/dev/null", O_RDWR);
【讨论】: