我尝试了system(),但是当辅助程序运行时,我的主程序(执行辅助程序的主程序)以某种方式挂起
第二个问题是如何在主程序中获取辅助程序的进程 ID?
在你想要的父进程中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;
}
使用 fork 创建一个新进程,然后 exec 在新进程中运行一个程序。有很多这样的例子。