同时运行两个程序
Running two programs concurrently
我在Ubuntu中内置了两个c++程序,我想同时运行它们。我不想把它们合并到一个c++项目中,并在不同的线程上运行它们,因为这会给我带来各种各样的问题。
我想有效地模拟的解决方案是,当我在终端中打开两个选项卡,并在一个单独的选项卡中运行每个程序。然而,我也希望一个程序(让我们称之为程序A)能够退出并重新运行另一个程序(程序B)。这不能仅仅在终端中实现。
所以我想做的是在程序A中写一些c++代码,它可以在任何时候运行和退出程序B。两个程序必须并发运行,这样程序A就不必等到程序B返回后再继续执行程序A。
任何想法?谢谢!
在Linux中,您可以fork
当前进程,这将创建一个新进程。然后,您必须使用exec
系统调用启动新进程。
是指:http://man7.org/linux/man-pages/man2/execve.2.html
例如:#include <unistd.h> /* for fork */
#include <sys/types.h> /* for pid_t */
#include <sys/wait.h> /* for wait */
int main(int argc,char** argv)
{
pid_t pid=fork();
if (pid==0)
{
execv("/bin/echo",argv);
}
}
这里有多个选项:
- 传统的POSIX fork/exec(有很多关于如何在SO中这样做的例子,例如这个)。
- 如果你可以使用Boost,那么Boost进程是一个选项。 如果你可以使用Qt,那么QProcess是一个选项。
看一下Linux操作系统调用,fork()
和exec()
。fork()
调用将创建当前进程的两个副本,它们将继续同时执行。
- 在父进程中,
fork()
的返回值为进程的PID(进程ID) - 子进程中
fork()
的返回值为0。 - 错误时,
fork()
的返回值为-1。
您可以利用这一点来控制父节点和子节点的行为。例如:
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <signal.h>
int main(int argc,char** argv)
{
char* progB = "/bin/progB";
char* args[progName, "arg1", "arg2", ..., NULL];
char* env[NULL]; // can fill in environment here.
pid_t pid=fork();
if (pid==0)
{
// In child...
execv(progB, args, env);
}
else if (pid == -1)
{
// handle error...
}
else
{
// In parent; pid is the child process.
// can wait for child or kill child here.
}
}
等待子进程退出(在上面的第三个例子中),你可以使用wait(2),它在成功终止时返回子进程pid,在错误时返回-1:
pid_t result = waitpid(pid, &status, options);
要先发制人地杀死你的孩子,你可以发送kill(2)中描述的杀死信号:
int result = kill(pid, SIGKILL); // or whatever signal you wish
这应该允许您按照原问题中的描述来管理您的流程。
相关文章:
- 为什么两个程序中的总和值在最后不同?
- 在两个程序中,传递指向结构的指针的行为不同
- C++中更快地执行两个程序的可能解释(使用 Python 比较)?
- 基于两个程序之间的事件触发器访问数据(内存)
- 两个程序的不同输出将一个数字转换为二进制
- 这两个程序有什么不同
- 多线程:为什么两个程序比一个程序好
- 为什么以下两个程序产生不同的输出?(C++,位操作,VS 2012)
- 两个程序中的无限递归
- C++同时运行两个程序-短信逃亡-
- 两个程序在本地循环中通信时相互阻塞
- 这两个程序的输出之间有什么区别以及为什么
- 是否可以让两个c++程序访问同一个内存位置
- 同时运行两个程序C/C++
- 这两个程序有什么不同
- 为什么两个程序中的一个会导致错误"*** glibc detected *** double free or corruption"而另一个则不会导致错误?
- 同时运行两个程序
- IPC:在两个程序之间使用c++中的命名管道
- 为什么这两个程序的输出在codeforce上是不同的,而在ideone上是相同的?
- C++程序,其输出是两个C++程序