我的过程仍然是守护进程吗?

时间:2016-01-11 19:21:18

标签: c linux

我对编程比较陌生,我的英语可能有点生疏,所以请保持温柔:)。

我正在尝试创建一组守护进程,这些守护进程将属于同一组而没有组长。我想我做到了但是我不确定我的方法是否仍然满足要求(如果我的进程仍然是一个守护进程)

这部分是在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他们都是守护进程吗?

编辑:我现在看到那些可能不是守护进程。有人可以向我解释如何制作符合我要求的守护进程吗?

2 个答案:

答案 0 :(得分:0)

通常,守护进程需要与其控制终端取消关联,或者至少忽略SIGHUP,并且您似乎不会这样做。

所以不,我认为你的代码没有达到守护进程状态。

经过进一步调查后,我发现setsid()解除了控制终端与其他行为的关联。所以请不要理会。

答案 1 :(得分:0)

PPID为1的任何东西在很大程度上都可能是一个守护进程。 您可以通过执行以下命令检查进程是守护进程的可能性:(命令行)

$ ps -xj

还有更多 here 讨论测试守护进程的方法。

here 讨论一般创建守护进程。 (使用C)