如何从Linux中的forked子进程立即返回?

时间:2012-05-18 09:03:38

标签: c linux process execv

我不熟悉linux C开发。

我的代码:

....

if((pid=fork())==0){
  //child process
  //start a process, may be need to change execv to other call
  execv (workdir , args);
}else if (pid<0){
  ...
}else{
  ...
}

我想要做的是立即从子进程中启动的新进程返回。

因为在当前的计划中,execv (workdir , args);不会返回。 (我需要开始一个长时间运行的过程)。

我想要做的是启动这个长时间运行的过程并立即返回我的C代码,以便我的C程序可以退出。

我该怎么做? 也许让我开始的新子进程成为一个守护进程,如何通过api调用来实现呢?

1 个答案:

答案 0 :(得分:3)

这样的事情:

close(0); open("/dev/null", 0);
close(1);

if(open("/dev/null", O_WRONLY) < 0) {
    perror("/dev/null");
    exit(1);
}

switch(pid = fork()) {
    case -1:
        perror(argv[0]);
        exit(1);
        break;
    case 0:
        fflush(stdout);
        close(2); dup(1);
        setpgrp();
        setsid();
        execv(argv[0], argv);
        execvp(argv[0], argv);
        perror(argv[0]);
        _exit(1);
        break;
    default:
        exit(0);
        break;
}

将fork并分离进程,然后退出。它“守护”了程序。