如何在C ++程序中启动一个可执行文件并获取进程ID在Linux中?

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

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

对于相同的信号有多个信号处理程序是否有效?

shell如何pipesubprocess?

为什么没有加载持久的用户设置?

在Linux中debuggingC ++

你怎么实际使用C库?

在你想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); // 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在新进程中运行一个程序。 有很多这样的例子。

相关文章

本篇内容主要讲解“gitee如何上传代码”,感兴趣的朋友不妨来...
这篇“从gitee上下的代码如何用”文章的知识点大部分人都不太...
这篇文章主要介绍“gitee如何下载仓库里的项目”,在日常操作...
本篇内容主要讲解“怎么在Gitee上更新代码”,感兴趣的朋友不...
本文小编为大家详细介绍“怎么将工程托管到gitee”,内容详细...
这篇文章主要介绍了gitee中图片大小如何调整的相关知识,内容...