有没有办法不等待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中需要什么系统调用,但应该是类似的。