popen和system问题
popen和system问题
1. 问题描述
C的代码里面去调用命令启动一个shell脚本,分别使用了下面两个途径。
2. 问题分析
通过分析popen,pclose,system的源码,两者的流程分别如下:
子进程的标准输入和标准输出,和跟着开启他的父进程的配置来的,当执行一个命令会后台运行的时候,比如./test.sh &, 其实又是fork出来一个子进程,然而内部封装的接口my_system接口中是连续调用的popen和pclose,这就导致了最终后台运行起来的那个test.sh子进程,它里面被popen中重定向的fd已经被关闭了,所以后面所有的echo打印都会报错“broken pipe”。表现出来就是在串口中看不到任何脚本里面的打印信息。
3. 问题总结
封装一个popen和pclose连续调用的接口,对于执行不依赖任何标准输入输出的命令是可以使用的,但是实际上这样做还不如直接调用system; 代码中频繁调用system和popen这种系统调用都会有一个问题,就是进程的切换都会带来性能上的一些开销,这个是c和shell混合编程的一个隐患,所以项目后期还是需要尽量将shell脚本中的业务集成进来,减少这种性能开销,也减少这种类似的调用上的一些异常。
转载于:https://www.cnblogs.com/doctors/p/10110967.html
popen和system问题相关推荐
- 命令逐行显示_在LoadRunner中执行命令行程序之:popen()取代system()
>>>推荐阅读<<< 1.性能测试学习笔记-场景设计 2.性能测试的重要意义 3.性能分析流程及方法 4.应用系统性能调优之性能分析 在LoadRunner中执行命 ...
- popen和system函数的区别 以及 popen打开的FILE指针能否用close替代fclose关闭
popen和system函数的区别 在c/cpp程序中执行shell命令,通常有两种方式,一种是使用popen函数,一种是使用system函数:两者会调用fork函数从父进程中fork出一个子进程,然 ...
- linux中popen函数,system函数与popen函数
为了更好的理解system()函数返回值,需要了解其执行过程,实际上system()函数执行了三步操作: fork一个子进程: 在子进程中调用exec函数去执行command: 在父进程中调用wait ...
- os.system和os.popen和commands
os.system和os.popen os.system(cmd)的返回值是脚本的退出状态码,只会有0(成功),1,2 os.popen(cmd)返回脚本执行的输出内容作为返回值 当你想把执行命令返回 ...
- Python中 os.popen、os.system和subprocess.popen方法介绍
Python 提供了多种与操作系统交互的方法,比如os模块中的popen和system方法,此外,Python subprocess模块中的Popen类也提供了与操作系统交互的方法,使用起来更加灵活, ...
- system与popen对比
system与popen对比: popen和system都可以执行外部命令. popen相当于是先创建一个管道,fork,关闭管道的一端,执行exec,返回一个标准的io文件指针.system相当于是 ...
- 学习笔记——popen()函数详解
popen()函数 引用度娘说的: popen() 函数通过创建一个管道,调用 fork 产生一个子进程,执行一个 shell 以运行命令来开启一个进程. 这个进程必须由 pclose() 函数关闭, ...
- system函数返回值,Linux
理论 我们先看下man手册是怎么说的man system RETURN VALUEThe value returned is -1 on error (e.g., fork(2) failed), a ...
- 在LoadRunner向远程Linux/Unix执行命令行并收集性能数据
前面介绍过在LoadRunner的Java协议实现"使用SSH连接Linux",当然连接之后的故事由你主导. 今天要讲的,是一个非Java版本.是对"在LoadRunne ...
最新文章
- php网络相关的扩展,文章专题扩展功能组件
- python中内存管理机制一共分为多少层_python 内存管理机制
- mysql 关闭锁_mysql数据库取消锁
- 计算机成绩表及格率怎么算,卫生资格人机对话如何考试如何评分?成绩如何核算?...
- 14产品经理要懂的-人性的目的性
- 解决浏览器跨域加载本地文件报错 Access to script at ‘xxx‘ from origin ‘null‘ has been blocked by CORS policy
- HLG 1334 最好的心情[lis 变形]
- 进程被kill原因_Linux内核系列 简析进程生命周期:从生到死的这一生(一)
- Linux终端命令格式
- 面包板是神马东西?。。
- 计算机英语单词怎么巧背,巧计英语单词的26个秘诀
- 汤姆猫代码python_用树莓派实现会说话的汤姆猫
- 51nod 1556 计算(默慈金数)
- tekton入门-细数tekton用到的那些images
- relative会脱离文档流吗_position:absolute会使元素脱离文档流
- 如何解决NavigationDuplicated: Avoided redundant navigation to current location:问题
- 安全设备默认地址账密总结
- Oracle Error:ORA-01465: 无效的十六进制数字【解决办法】
- oracle weblogic开启,菜鸟经验:oracle与weblogic自动启动与停止
- 高数叔数学建模学习笔记(1)
热门文章
- mvc+ef中比较数据
- 站内搜索--3--之Lucene.Net使用
- C# SendInput 实现模拟鼠标操作
- 图像检索新方向,阿里提出区域检索算法|CVPR 2020
- 零基础入门学习Python,我与python的第一次亲密接触后的感受
- 43岁被裁员,200万年薪泡汤:这4件事你要尽早明白
- java堆排序解决topk问题,利用堆排序来解决topK问题
- CVPR2020 Oral|场景去遮挡新方法:港中文首次提出自监督新框架,已开源
- 独家总结 | 决策树算法Python实现(附代码详解及注释)
- 拥抱ROS2系列:ROS2概述和实践入门(一)