如何在C ++程序中启动可执行文件并获取其进程ID(在linux中)?

时间:2012-11-26 02:26:30

标签: c++ linux

我试过系统(),但不知怎的,当辅助程序运行时,我的主程序(执行辅助程序的主程序)挂起

第二个问题是我如何在主程序中获取辅助程序的进程ID?

2 个答案:

答案 0 :(得分:13)

在父进程中,您需要fork

Fork创建一个全新的进程,并将子进程的pid返回给调用进程,将0返回给新的子进程。

在子进程中,您可以使用execl之类的内容来执行所需的辅助程序。 在父进程中,您可以使用waitpid等待孩子完成。

这是一个简单的说明性示例:

#include <iostream>
#include <sys/wait.h>
#include <unistd.h>
#include <cstdio>
#include <cstdlib>

int main()
{
    std::string cmd = "/bin/ls"; // secondary program you want to run

    pid_t pid = fork(); // create child process
    int status;

    switch (pid)
    {
    case -1: // error
        perror("fork");
        exit(1);

    case 0: // child process
        execl(cmd.c_str(), 0, 0); // run the command
        perror("execl"); // execl doesn't return unless there is a problem
        exit(1);

    default: // parent process, pid now contains the child pid
        while (-1 == waitpid(pid, &status, 0)); // wait for child to complete
        if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
        {
            // handle error
            std::cerr << "process " << cmd << " (pid=" << pid << ") failed" << std::endl;
        }
        break;
    }
    return 0;
}

答案 1 :(得分:4)

使用fork创建一个新进程,然后执行exec以在新进程中运行程序。有很多这样的例子。