有没有办法不等待系统()命令完成?(c)
Is there a way to not wait for a system() command to finish? (in 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上不起作用(,您可能会考虑使用一些较低级别的Windows功能,也许可以调用StartProcess
。这更复杂,但它可能会让您对流程的执行方式有更多的控制权。另一方面,如果system()
满足您的要求,您也可以使用它。
我相信如果您添加一个'&'直到命令结束,它都会起作用&'告诉在后台中运行命令
int a = system("python -m plotter &");
在标准库中没有任何方法,但如果您的操作系统支持,您可以分叉或创建一个单独的线程在后台运行它。
"System"命令只允许在完成自身执行后执行其余代码。
如果希望同时处理,则应该使用fork((。
这个词是一个异步函数/方法调用。C和C++没有这样的功能,所以您必须在单独的线程中调用该函数,或者使用将在单独的进程中运行它的系统调用。这两种方法都倾向于特定于平台,尽管存在跨平台线程库。
我知道在unix中,要在一个单独的进程中实现这一点,您将使用fork(2(创建一个新进程,并使用exec(3(在该进程中执行一个新程序。我不知道在Windows中需要什么系统调用,但应该是类似的。
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 如何让LLDB在成功时退出,在失败时等待
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- clang整洁10忽略了我的NOLINT命令
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- C++交互式命令行提示符,无需等待换行符
- 发送命令并等待回复USB设备
- 等待ping命令响应时出现Q消息
- 是否有一种方法来等待最后一个命令GPU之前的下一个命令
- 有没有办法不等待系统()命令完成?(c)
- 从命令行执行exe后,命令行应等待exe完成
- 如何告诉我的程序在等待从用户那里获取命令时执行某些操作