linux运行多线程语句,linux多线程中使用system函数后时而程序崩溃,求助!!!...
本帖最后由 sz_hiter 于 2010-09-05 15:07:33 编辑
如题。
本程序有7个线程,其中一个线程(简称sys线程把。。)每秒会调用几次system函数(例如system("df -h > /tmp/tmpFlashInfo.file"),用于检查Flash的占用情况)。
我主要做了如下的测试:
1、屏蔽sys线程后,其他线程一直运行,正常。
2、打开sys线程后,在调用system函数前,printf一句start,在调用system函数后,printf一句end,然后通过主板运行,串口打印的方式,发现每次出现崩溃的时候(时间不定,少则几分钟,多则几小时),都是打印了start之后,但没有end打印。同时通过core文件分析的崩溃原因是:
Program terminated with signal 11, Segmentation fault.
#0 0x00989680 in ?? ()
(gdb) bt
#0 0x00989680 in ?? ()
#1 0x4002ce6c in ?? () from /lib/libpthread.so.0
(gdb)
看不懂到底是什么问题。。。!
2、屏蔽sys线程中的相关的system函数。(例如检测flash的/tmp/tmpFlashInfo.file用手工创建好后不再删除),7个线程一直运行,正常。
3、由1、2的测试得出在system调用的时候使得程序崩溃(gdb调试core文件说是信号11->段错误,但是程序中信号都捕捉不到。。)
4、将sys线程独立为一个单线程运行,正常。由此推出单线程中system函数应用正常。
5、由3、4推出多线程下system函数应用是不可靠的。
注:sys线程与其他6六个线程没有任何交互。
多线程中不能使用这个system函数,这该如何是好啊(例如程序中启动udhcpd服务等),高手指点下,不甚感激!!
|
呵呵,前面没有仔细看你的帖子。这次仔细看了一遍。
从理论上来说,多线程中使用system应该没有什么问题(在不考虑信号的情况下)。
我印象中,我在多线程的程序中使用过system掉用的。只是频率没有你这么快。
1、你每秒调用几次system()是怎么实现的?通过信号还是直接用sleep(1)?
2、试着将调用的频率降低到每10秒调用一次,看看结果如何?
PS:初步怀疑是system系统调用对信号的处理造成了程序的崩溃。
|
刚看到,system其实就是fork+exec的过程
看你core的跟踪,信号11是SIGSEGV
一般SIGSEGV是试图对只读映射区域进行写操作
建议:在你system调用里面写个别的语句,比如ls -l /usr/include > /tmp/ls.log之类的
看看是否还core掉
如果不再core,那是你执行语句产生的信号问题
就要考虑执行语句的处理问题了
如果还core的话,就看看system调用是否对你线程的某信号产生矛盾操作之类的吧
|
多线程程序调用system没什么问题吧。
我的疑问是,楼主为什么捕捉不到SIGSEG的信号。你是怎么捕捉的?
|
那你试试 PTHREAD_MUTEX_RECURSIVE 类型
|
再写一个服务程序,专门处理system()调用
你的多线程程序通过某种IPC机制与服务程序通信,指示它调用system(),并返回处理结果
|
我在ARM7上多线程读写文件,每个线程读写各自的文件(没看到这句的就不要回复了!)程序发生不定时的kill。简化到只开关各自文件不读写,问题复现。最后对各线程在打开、关闭文件时用mutex互斥,程序稳定运行12小时。
最后总结为IO函数的不可重入性导致A释放B的文件指针。
linux运行多线程语句,linux多线程中使用system函数后时而程序崩溃,求助!!!...相关推荐
- linux运行c语言pause,c++中的system(pause)的作用和含义解析
简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...
- python可以在linux运行_在linux运行python
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! linux下编译安装python3与python2共存linux下默认系统自带p ...
- Linux运行8086代码,* linux下编译,链接,运行,汇编程序
当前使用的操作系统:ubuntu11.10 汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段: 1)data 段 汇编程序data(数据)段是可选的. 数据段声明带有初始值的数据元素,这 ...
- linux运行16668端口,Linux 性能监控之命令行工具
引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...
- linux显示编程语言语句,linux – 如何使用Glade / GtkD和D编程语言显示Hello World
>安装在Mac,Linux或Windows计算机上编译D语言的DMD编译器.您可以获得有关此here的更多信息. >在Mac,Linux或Windows计算机上安装Glade界面设计器.使 ...
- linux运行游戏模拟器,Linux系统上安装ePSXe 1.6.0游戏模拟器
下载Linux版本ePSXe模拟器! 官方网站下载:http://www.epsxe.com/download.php ePSXe v1.6.0 180 KB ePSXe executeable (L ...
- linux运行游戏模拟器,Linux安装ePSXe 1.6.0游戏模拟器 【转载】
下载Linux版本ePSXe模拟器! 官方网站下载:http://www.epsxe.com/download.php ePSXe v1.6.0 180 KB ePSXe executeable (L ...
- window应用在linux运行,如何在Linux上运行Windows应用程序?
原标题:如何在Linux上运行Windows应用程序? 一些人可能避免在Linux上运行Windows应用程序,但事实上有时候这么做大有帮助. 一些人无法摆脱Windows的最主要原因之一是可用的应用 ...
- db2 控制台执行创建函数语句_DB2数据库中创建定义函数
本文将为您详细介绍DB2数据库中创建用户自定义行数,用以扩展扩展内置的 DB2 函数的方法,供您参考,希望对您有所帮助. 可以创建用户定义函数来扩展内置的 DB2 函数.例如,创建计算复杂的算术表达式 ...
- c++中的system函数
system函数 是可以调用一些DOS命令,比如 system("cls");//清屏,等于在DOS上使用cls命令 下面列出常用的DOS命令,都可以用system函数调用: AS ...
最新文章
- WebStack-Hugo | 一个静态响应式网址导航主题
- linux的文件系统及节点表
- 自然语言系列学习之表示学习与知识获取(六)融合实体描述的知识表示和融合实体所在句子的知识表示
- 【Elasticsearch】Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布
- 玩转 SpringBoot 2.x 之 快速集成 Jedis客户端(普通版)
- SAS入门教程2---建立SAS数据集
- MIPI接口和DVP接口的区别及优点
- Linux指令系统文件复制到U盘
- Flutter气泡框实现
- matlab:正态分布的概率密度图形
- 联网监管与手册报关的区别
- 勿以恶小而为之,勿以善小而不为
- (已更新)全新商城微信小程序源码支持对接公众号
- 【天翼云服务器】新服务器centos环境搭建,按照docker环境,解决相关配置问题。
- 重学JavaWeb(3)JSON、AJAX
- template 的 用法
- QQ个性域名邮箱(免费企业邮箱)快速申请
- 开启Maven使用之路
- 数字化转型与智能创新100个案例
- QML QQuickView透明背景