我对编程比较陌生,我的英语可能有点生疏,所以请温柔一点:)。
我正在尝试创建一组守护进程,这些守护进程将属于同一个组,而没有组领导。我想我做到了,但我不确定我的方法是否仍然满足要求(如果我的进程仍然是一个守护进程)
这部分在0.c中

pid_t pid=fork();
if (pid==0)
{
    execl ("./1", "1", str, (char *)0);
    exit(EXIT_SUCCESS);
    sleep(1);
}

这部分代码在1.c中
pid = fork();
if (pid < 0)
    exit(EXIT_FAILURE);
if (pid > 0)
    exit(EXIT_SUCCESS);
gid = setsid();
if (gid < 0)
    exit(EXIT_FAILURE);
gid = setsid();
if (gid < 0)
    exit(EXIT_FAILURE);
for(i=0; i<n; i++)
{
pid_t pid=fork();
    if (pid==0)
    {
        execl ("./2", "2", str, str1, (char *)0);
        exit(EXIT_SUCCESS);
        sleep(1);
    }
}

这个在2
pid_t pid;
pid = fork();
if (pid < 0)
    exit(EXIT_FAILURE);
if (pid > 0)
    exit(EXIT_SUCCESS);
umask(0);
chdir("./");
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);

现在假设我有n个进程2它们都是守护进程吗?
编辑:现在我发现这些可能不是守护进程。那么有人能给我解释一下如何制作能满足我要求的守护进程吗?

最佳答案

通常,守护进程需要与它们的控制终端解除关联,或者至少忽略SIGHUP,而您似乎没有这样做。
所以不,我认为您的代码没有达到守护进程状态。
在进一步的研究之后,我发现setsid()除其他作用外,还解除了控制终端的关联。所以请忽略这一点。

10-06 05:15
查看更多