有没有办法不等待系统()命令完成?(c)

Is there a way to not wait for a system() command to finish? (in c)

本文关键字:命令 等待 系统 有没有      更新时间:2023-10-16

类似于:
程序在调用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上不起作用(,您可能会考虑使用一些较低级别的Windows功能,也许可以调用StartProcess。这更复杂,但它可能会让您对流程的执行方式有更多的控制权。另一方面,如果system()满足您的要求,您也可以使用它。

我相信如果您添加一个'&'直到命令结束,它都会起作用&'告诉在后台中运行命令

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

在标准库中没有任何方法,但如果您的操作系统支持,您可以分叉或创建一个单独的线程在后台运行它。

Linux上的

"System"命令只允许在完成自身执行后执行其余代码。

如果希望同时处理,则应该使用fork((。

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

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