有没有办法不等待system()命令完成? (在c中)

相近:
程序调用system()后程序没有执行任何操作

我对使用C很新,但基本上,我想执行以下行:

int a = system("python -m plotter"); 

这将启动我开发的python模块。 但是,我希望我的c程序的其余部分继续运行而不是等待命令完成执行(python应用程序处于无限循环,因此它不会自动关闭)。 有没有办法用C / C ++做到这一点? 我希望这不是前一个问题的重新发布,但老实说我不知道​​该如何解决这个问题,我在搜索中找不到任何内容。

更新:解决方案是:

 int a = system("start python -m plotter &"); 

system()只是将其参数传递给shell(在类Unix系统上,通常是/bin/sh )。

试试这个:

 int a = system("python -m plotter &"); 

当然, system()返回的值不是python脚本的退出状态,因为它还没有完成。

这可能只适用于类Unix系统(可能包括MacOS); 特别是,它可能不适用于MS Windows,除非你在Cygwin下运行。

在Windows上, system()可能会调用cmd.exe ,它不接受在类Unix系统上使用相同语法的命令。 但Windows start命令应该完成这项工作:

 int a = system("start python -m plotter"); 

只要您编写特定于Windows的代码(除非您在$PATH碰巧有start命令,否则start将无法在Unix上运行),您可以考虑使用某些较低级别的Windowsfunction,可能通过调用StartProcess 。 这更复杂,但它可能会让您更好地控制流程的执行方式。 另一方面,如果system()符合您的要求,您也可以使用它。

标准库中没有办法,但是如果你的操作系统支持它,你可以派出或创建一个在后台运行它的独立线程。

我相信如果你在命令的末尾添加一个’&’它将起作用。 ‘&’告诉命令在后台运行

 int a = system("python -m plotter &"); 

Linux上的“System”命令只有在完成自身执行后才能执行其余代码。

如果要同时处理,则应使用fork()。

这个词是一个异步函数/方法调用。 C和C ++没有这样的function,因此您必须在单独的线程中调用该函数,或者使用将在单独的进程中运行它的系统调用。 尽管存在跨平台线程库,但这两种方法都倾向于特定于平台。

我知道在unix中,在单独的进程中执行此操作,您将使用fork(2)创建一个新进程,并使用exec(3)在该进程中执行新程序。 我不知道在Windows中需要什么系统调用,但应该是类似的。