首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Windows上执行进程并获得结果

在Windows上执行进程并获得结果
EN

Stack Overflow用户
提问于 2015-07-26 08:15:35
回答 1查看 236关注 0票数 2

我有一段代码,它执行一个进程并检索结果。

代码语言:javascript
运行
AI代码解释
复制
namespace {
    FILE* really_popen(const char* cmd, const char* mode) {
#ifdef _MSC_VER
        return _popen(cmd, mode);
#else
        return popen(cmd, mode);
#endif
    }
    void really_pclose(FILE* pipe) {
#ifdef _MSC_VER
        _pclose(pipe);
#else
        pclose(pipe);
#endif
    }
    std::string ExecuteProcess(std::string cmd) {
        FILE* pipe = really_popen(cmd.c_str(), "r");
        if (!pipe) throw std::runtime_error("Could not invoke command " + cmd);
        char buffer[128];
        std::string result = "";
        while(!feof(pipe)) {
            if(fgets(buffer, 128, pipe) != NULL)
                result += buffer;
        }
        really_pclose(pipe);
        return result;
    }
}

这对我来说在Linux上运行得很好,但在Windows上,它有一个可怕的死锁习惯--似乎fgets再也不会回来了。我已经查看了CRT源代码,fgets最终委托给了永远不会返回的ReadFile

如果我从命令行调用该命令,它将在一秒钟内返回。

如何在不死锁父程序的情况下读取Windows上的输出?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-26 14:38:46

如果子程序还没有退出,那么对fget()的调用就不会退出,所以您需要解决为什么子程序没有退出。在这种情况下,最有可能的原因是孩子挂起是因为没有标准输入。

如果这是问题所在,您可以通过将管道模式更改为"rw“来解决这个问题。你通常不需要用额外的管道做任何事情,它只需要在那里。

(正如您在注释中提到的,这个问题也可以通过使用命令shell重定向来将NUL的句柄作为标准输入来解决。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31639168

复制
相关文章
java 查看进程状态_java执行shell命令并返回结果
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172503.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
8890
java 查看进程状态_java执行shell命令并返回结果
Fkill –在Linux上搜索并终止进程
Fkill是Fabulous Kill的缩写,它是一个跨平台的命令行实用程序,可一次交互式地搜索和杀死多个进程。通常,我使用“ top”命令或“ ps -ef | grep <进程名称>”或“ pidof <进程名称>”来查找进程ID,并使用命令“ kill -9 <PID>”将其kill掉。后来我发现,Fkill程序可以找到正在运行的进程,并可根据需要杀死一个或多个进程。它使用Nodejs编写,并且支持Linux、Mac OS和Microsoft Windows。
用户6543014
2020/02/21
2.4K0
怎样在windows上定时执行python
作为一个需要在电脑上工作和学习的人,一件十分困扰我的事情就是怎样不受互联网中其他内容的干扰而专注于自己想要做的事情,有的时候真的是沉浸于微博上的消息,忘了自己本来想要做的事。不过我有一件神器,自己爱豆的音频激励,所以决定写一个python脚本,让电脑每小时定时播放,提醒自己专注学习。
py3study
2020/01/19
1.6K0
Python非阻塞模式创建子进程并收集其执行结果
编写Python程序,以非阻塞模式创建子进程,分别执行特定的Python代码,检测并控制子进程执行时长,收集和显示程序执行结果。
Python小屋屋主
2022/04/13
1.3K0
Python非阻塞模式创建子进程并收集其执行结果
jenkins 执行构建 并查看结果
继完成构建项目配置http://www.cnblogs.com/yajing-zh/p/5111060.html后,则要执行构建。
微风-- 轻许--
2019/08/01
2.7K0
在Windows上安装Docker并部署Node项目
为啥要在Windows上装Docker呢?在Windows上又不能发挥Docker的优势!!
码客说
2021/03/23
4.1K0
Windows查找进程并关闭
tasklist /v | findstr "**" ---- 找程序名为**的进程
科控物联
2022/04/20
2.3K0
Windows查找进程并关闭
在windows下查看进程
在windows下进行测试时,有可能会出现端口占用的情况,可以用如下方法去查看哪个程序占用了该端口:
gzq大数据
2021/04/07
1.7K0
如何从结果集中获得随机结果
全表扫描(Full table Scan) 全表扫描返回表中所有的记录。 执行全表扫描,Oracle读表中的所有记录,考查每一行是否满足WHERE条件。Oracle顺序的读分配给该表的每一个数据块,这样全表扫描能够受益于多块读. 每个数据块Oracle只读一次.
数据和云01
2018/09/10
1.6K0
ServiceFabric: 在Windows上创建容器应用并部署到ServiceFabric中
现在做项目大多采用前后端分离的方式,本文会建立一个web前端(angular 6),一个后端API(传统的.net framework),前端代码会调用后端的API,接着将这两个分别打包成基于windows的docker 镜像,最后将这两个镜像部署到Azure的service fabric中。
我被狗咬了
2019/09/23
1.3K0
ServiceFabric: 在Windows上创建容器应用并部署到ServiceFabric中
uniapp如何封装全局方法 并返回执行结果
在uniapp中你可以这样实现,你可以使用Promise对象来实现当全局公共方法执行完后执行调用者的逻辑。以下是一个简单的示例代码:
兔云小新LM
2023/05/25
3.3K0
uniapp如何封装全局方法 并返回执行结果
python控制windows窗口,并输入数据_python执行windows命令
sock = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
全栈程序员站长
2022/11/10
6770
在OpenLogic上安装桌面环境并通过Windows远程桌面登录
为700多个不同的开源代码包 提供服务和支持,包括了对CentOS的商业级支持,派生自Red Hat Enterprise Linux为公众提供的源代码的企业级 Linux 分布。 以上是网上找到的关于OpenLogic的介绍,反正当CentOS用就是了,更多详细的信息,可以移步OpenLogic的官网:http://www.openlogic.com 创建OpenLogic虚拟机 过程不再赘述,并且添加22和3389端口,添加方法可以参照 使用windows远程桌面连接Windows Azure中的Ub
tanmx
2018/05/25
2.3K0
MongoDB - 在Windows上安装
1 下载MongoDB社区版, 下载链接 http://www.mongodb.org/downloads?_ga=1.129742796.1997610832.1481940266 2 安装Mong
我思故我在
2018/05/11
2.4K0
在 Windows 上安装 Composer
(2) 选中PHP安装目录下的php.exe,PHP的安装路径在环境变量 Path 中,则会自动选中,否则需要手动选中
很酷的站长
2023/02/17
2.1K0
在 Windows 上安装 Composer
在Windows上安装Jenkins
apache-tomcat/bin目录下的startup.bat在windows上启动。
清菡
2020/12/02
2.5K0
在Windows上安装Jenkins
MongoDB - 在Windows上安装
1 下载MongoDB社区版, 下载链接 http://www.mongodb.org/downloads?_ga=1.129742796.1997610832.1481940266 2 安装Mong
我思故我在
2018/07/05
2.1K0
在windows上安装mysql
mysql下载地址:https://dev.mysql.com/downloads/mysql/8.0.html
JQ实验室
2022/02/10
3K0
在windows上安装mysql
在Windows上安装Jekyll
在Windows上安装Jekyll Jekyll介绍 jekyll是一个简单的免费的Blog生成工具,类似WordPress。但是和WordPress又有很大的不同,原因是jekyll只是一个生成静态网页的工具,不需要数据库支持。但是可以配合第三方服务,例如Disqus。最关键的是jekyll可以免费部署在Github上,而且可以绑定自己的域名。 Jekyll团队没有正式支持在Windows上使用Jekyll,官方不建议在Windows上使用Jekyll。 安装 Ruby 首先,点击下面的按钮,下载与
程序员鹏磊
2018/02/09
1.3K0
在Windows上安装Jekyll
在Windows上编译openssl
###1、下载openssl源码 https://www.openssl.org/source/ ###2、安装环境 vs2010 ActivePerl nasm(将nasm.exe所在目录加入到%PATH%中) ###3、编译 进入Visual Studio 命令提示(2010) 进入源码目录 执行perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32 执行set path=C:\Program Files (x86)\Microsoft SDKs\
drunkdream
2018/07/06
2.2K1

相似问题

PHP在后台执行进程并获得结果

14

在windows上执行.bash脚本(使用groovy),并输出结果

28

在Windows上用PHP执行后台进程

11

手动执行意图并获得其结果

11

远程控制windows进程-终止并执行

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文