使用system()函数要谨慎

Linux下使用system()函数一定要谨慎 转载自:http://my.oschina.net/renhc/blog/53580 linux尽量避免使用system。 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故 阅读详情

 

今天在使用system()函数启动apache时,出现了一个问题,程序伪代码如下:

int sock = createSocket();

bindSocket(sock,1111);

listen();

while((int clisock = accept())> 0)

{

   string strRecvBuff = recvFromClient(clisock);

   system("./apachectl start");

   close(clisock);

}

 

当执行启动apache的任务时,system正常结束,在当前进程中关闭了和客户端连接的socket,但是此时在用系统中用netstat -anp | grep 1111命令查看,发现有一个tcp连接始终连接到系统的1111端口,并且资源为apache进程所拥有。

为什么会出现这种情况呢?首先要知道system函数的原理,system函数就是fork + exec,其原理是在当前进程中fork()一个新的进程,并在子进程中调用exec替换掉程序段。现在返回头看看上面的那段代码,服务器accept以一个客户端连接,并从客户端读取用户控制信息,当发现命令是启动apache时,调用system函数运行 apachectl start 命令。这时会发生什么事情呢?fork的子进程中把当前的网络连接 “复制” 出一份,由于apache是当前程序的子进程,故apache时钟占用这个连接和端口,即使父进程已经退出了、并且在父进程中关闭了socket,但是网络连接仍然在。

  解决这个问题的方法其实也很简单,利用fcntl函数,设置socket遇到exec函数族的时候自动关闭,这样就不会造成socket泄漏了。

具体代码为,在创建socket以后,设置:

int val = 0;
val = fcntl(clifd,F_GETFL,0) ;

fcntl(clifd,F_SETFD,val|FD_CLOEXEC)

这样就可以了

 

【反封禁策略】集成 Undetected-Chromedriver:让 Browser-Use 绕过 Cloudflare 五秒盾 摘要:AI Agent如何突破Cloudflare检测的实战指南 本文针对AI Agent在Cloudflare检测下频繁受阻的问题,深入分析了undetected-chromedriver的工作原理与局限性。文章指出,Cloudflare 2026年的检测体系已升级为"浏览器指纹+IP信誉+协议指纹+行为模式"的多维交叉验证,单一伪装方案难以奏效。 核心内容包括: undetected-chromedriver的三层补丁体系解析 v2与v3版本的适用场景对比 两种Browser-Use集成方案:Selen 阅读详情

相关推荐

数据中心GPU芯片性能参数速查表(Nvidia+国产算力卡)

本文提供了一份数据中心GPU芯片性能参数速查表,涵盖Nvidia与国产算力卡两大阵营。文章详细解读了算力、显存、互连技术及功耗等关键性能指标,并对比了A100、H100、昇腾910B等主流型号,旨在帮助用户根据AI训练、推理等实际场景,做出高效的硬件选型与成本评估决策。

a0b1c2d3的专栏 840

C语言的system()函数详解

函数原型 包含在头文件 “stdlib.h” 中 int system(const char * command) 函数功能 执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。 说明:在windows系统中,system函数直接在控制台调用一个command命令。 在Linux...

dark_cy的博客 19万+

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 390

详解C语言system()函数,一个函数让初学者的代码有趣(一)

首先使用system函数要包含头文件#include ,system函数可以通过调用一些命令来实现一些特殊的功能,我们这里直接就开始讲解了,主要是为了让大家可以先快速上手,之后会出一篇更详细的讲解。

freed_Day的博客 1万+

模型算力需求估算

(Billion Parameters,简称B)和训练/推理的计算任务复杂度,结合硬件计算能力(例如每秒浮点运算次数,FLOPS)来估算。以下是详细的方法和公式说明,以及实际的计算示例。算力需求的估算依赖于参数量、模型架构及硬件性能,结合训练/推理场景的特定要求来计算。通过上述公式和示例,我们可以定量分析不同任务的算力需求,并合理配置硬件资源以优化运行效率。结论:推理任务相对较轻,单台H100可以在30秒内完成此任务。推理算力需求一般远低于训练,因为只需要执行前向传播。,可以将训练时间缩短到约。

形上得其象,形下合于数;阴阳自济,玄理自明。 8963

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 996

全网最全c++中的system详解

1,简介system()函数是在C++制作中十分常用,有用的一个函数。其效果类似于系统中"cmd"控制台和"bat"文件。通常会在C++字符游戏,和C++整蛊程序中使用。其形式是以:system("***");呈现。

HenryC0509的博客 2万+

015、PCIE带宽计算:理论vs实际——调试手记

最近在调一块图像采集卡,主控抱怨数据吞吐量上不去。规格书上写着PCIE 3.0 x4,理论带宽接近4GB/s,实际测试却卡在2.5GB/s左右。硬件同事拍胸脯说链路训练正常,软件同事咬定DMA配置没问题——这种场景是不是很熟悉?

z534437748的博客 883

Linux下system () 函数详解简介,system()与execl()的区别,popen()

Linux下system () 函数详解简介,system()与exec()的区别

ken2232的博客 8495

【爬虫实战】Instagram博主图片爬取:模拟登录+滚动加载,轻松抓取高清美图

在当今社交媒体时代,Instagram作为全球最受欢迎的图片分享平台之一,汇聚了无数优质博主的海量精美图片。对于数据爱好者、营销分析师、AI训练数据收集者来说,如何高效、稳定地爬取Instagram博主的图片,成为了一项极具实用价值的技术挑战。然而,Instagram的反爬机制日益严格,传统的静态页面请求已经无法满足需求。本文将带你从零开始,使用2024-2025年最新技术栈,实现模拟登录、滚动加载、高清图片下载的全流程爬虫。✅ 全流程代码可直接运行✅ 模拟手机端请求绕过反爬。

2201_76125261的博客 598

Vue - ElementUI el-date-picker 周日期选择器(type=week),获取开始和结束的年月日、当前选择日期的周数等,支持将选择范围修改为 “礼拜一到礼拜日“(提供示例源码)

vue,element-ui,DatePicker日期选择器,vue2elementUI日期选择器选择一周7天的数据格式怎么拿到,el-date-picker设置type等于week后怎么设置format属性,format和value-format怎么设置,范围选择器周,一周,选择一周7天时间,el-date-picker,周,type=week,周选择器,面板显示周数,显示第n年第n周数据,详细示例代码教程,elementui官方文档,vue2element-UI日期时间选择器怎么设置week周选

🏆 前端领域优质创作者 6439

system()函数详解及用法

System()用于调用一些DOS命令,执行dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。在windows系统,system函数直接在控制台调用一个command命令;在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后随即返回原调用的进程。system的原型函数为:int system(const char * command)

JDSNYD的博客 5004

Opencv项目实战:09 物体尺寸测量

《Opencv项目实战:09 物体尺寸测量》本项目主要是运用了之前扫描文档的思想,以A4纸为背景,检测其中区域的物体长和宽。我的摄像头无法固定,所以是手持的,且由于我在寝室里面是真的没有找到合适的测量物体以及背景色(全是米色或原木色的)。所以效果有所欠缺,但经过ps修改的图片,检测的效果还是很不错的。

m0_62919535的博客 1万+

使用system()函数一定要谨慎-1

曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用了system()函数,有时你不得不面对它

zrhloveswallow的专栏 1938

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

system函数用处 linux,Linux下使用system()函数一定要谨慎

曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用了system()函数,有时你不得不面对它...

weixin_35790607的博客 305

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【C/C++】Linux下使用system()函数一定要谨慎

曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。只是简单的知道用这个函数执行一个系统命令,这远远不够,它的返回值、它所执行命令的返回值以及命令执行失败原因如何定位,这才是重点。当初因为这个函数风险较多,故抛弃不用,改用其他的方法。这里先不说我用了什么方法,这里必须要搞懂system()函数,因为还是有很多人用了system()函数,有时你不得不面对它

Csdn_zc的专栏 2904

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux下使用system()函数(一定要谨慎)

函数原型 包含在头文件 “stdlib.h” 中 int system(const char *command); 函数功能 执行 dos(windows系统) 或 shell(Linux/Unix系统) 命令,参数字符串command为命令名。另,在windows系统下参数字符串不区分大小写。 说明:在windows系统中,system函数直接在控制台调用一个command命令。 在Linux/Unix系统中,system函数会调用fork函数产生子进程,由子进程来执行command命令,命令执行完后

weixin_49356927的博客 1420
上一篇: 进程和线程编程
下一篇: 自己实现linux下ping工具
zhsp1029
博客等级 码龄21年 115粉丝 89原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值