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

标签 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 调用来实现?

最佳答案

像这样:

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/

相关文章:

c - 打开一个 wav 文件以在文本编辑器和 sndfile 中读取数据

c++ - 使用 stdin stdout 和 stderr 启动 exe/进程?

c - 面对以下代码的一些问题......有什么问题吗?

c - g_file_new_for_path() 导致段错误

c - 在 C 中初始化指针的不同方法

linux - 如何将 jar 文件复制到单个目录中可用的多个目录

c++ - QProcess 输出不显示

linux - 在 Debian 上使用 qtcreator 的 QSerialPort 问题

c++ - 什么是进程和线程?

windows - 字体文件被系统进程占用