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

gh4*_*h4x 29 c c++ system call hang

类似于:
程序在调用system()后没有执行任何操作

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

int a = system("python -m plotter");
Run Code Online (Sandbox Code Playgroud)

这将启动我开发的python模块.但是,我希望我的c程序的其余部分继续运行而不是等待命令完成执行(python应用程序处于无限循环,因此它不会自动关闭).有没有办法用C/C++做到这一点?

更新: 解决方案是:

int a = system("start python -m plotter &");
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 35

system()简单地将其参数传递给shell(通常在类Unix系统上/bin/sh).

试试这个:

int a = system("python -m plotter &");
Run Code Online (Sandbox Code Playgroud)

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

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

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

int a = system("start python -m plotter");
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,这解释了.`system()`可能会调用`cmd.exe`,它不接受与Unix shell相同的语法.我应该早点想到这一点,但如果你在你的问题中告诉我们你正在使用什么平台,那将会有所帮助.一个快速的谷歌搜索发现[这](http://www.tomshardware.com/forum/34598-45-windows-command-background-unix),这可能是有用的; 尝试`start`而不是`nohup`. (4认同)
  • 如果你把它改成`int a = system("nohup python -m plotter&")会发生什么;`? (3认同)
  • 我在我的linux上运行了一个小测试,如果shell终止,后台命令也会终止,所以这不一定能解决问题 (2认同)
  • 开始似乎已经修好了!对不起,我没有意识到这种事情是特定于平台而不是特定于C的. (2认同)

lov*_*nux 5

我相信,如果在命令末尾添加“&”,它将起作用。'&'告诉命令在后台运行

int a = system("python -m plotter &");
Run Code Online (Sandbox Code Playgroud)

  • 在什么平台上? (2认同)