gpt4 book ai didi

c - 如何立即从 Linux 中的 fork 子进程返回?

转载 作者:太空宇宙 更新时间:2023-11-04 07:33:53 25 4
gpt4 key购买 nike

我不熟悉 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 调用来实现?

最佳答案

像这样:

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 并分离一个进程,然后退出。它“守护”程序。

关于c - 如何立即从 Linux 中的 fork 子进程返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10649694/

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