gpt4 book ai didi

c - 如何从 C 中的父进程分离 fork 进程

转载 作者:行者123 更新时间:2023-12-02 00:22:28 25 4
gpt4 key购买 nike

所以我正在用 C 设计一个基本的 UNIX shell。

    signal(SIGCHLD, handler);
pid = fork();
switch (pid) {
case -1: printf("Fork failed; cpid == -1\n");
break;

case 0: child_pid = getpid();
argv[0] = prog;
argv[1] =NULL;
//exit(0);
sid = setsid();
execv(absPath,argv);
//printf("%d: this is the child, pid = %d\n", i, child_pid);
//sleep(1);
//exit(0);
break;

default: printf("This is the parent: waiting for %d to finish\n", pid);
waitpid(pid, NULL, WNOHANG);
printf("Ttttthat's all, folks\n");
//break;
}
//execv(absPath,argv);
//printf("CHILD PROCESS");
}

}
void handler(int sig)
{
pid_t pid;

pid = wait(NULL);

printf("Pid %d exit.\n", pid);
exit(0);
}

但它仍然在同一个 shell 中执行 fork 进程,尽管在“default”子句之后。

你能帮我让它作为后台进程运行吗?谢谢!

P.S:这只是一个片段。

最佳答案

评论一些明显的错误:

  • 在子进程中执行 exit(0);从而立即退出子进程。删除此行。
  • 我认为为了清楚起见,您应该调用 execv()像这样execv(argv[0], argv);

  • 编辑:
    Read the following解决从子进程 fork 的问题。

    关于c - 如何从 C 中的父进程分离 fork 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311879/

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