本帖最后由 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函数后时而程序崩溃,求助!!!...相关推荐

  1. linux运行c语言pause,c++中的system(pause)的作用和含义解析

    简单来说就是暂停的意思,一般在LINUX编程时会用到,等待接收信号,才会重新运行 . 在进行C/C++编程的时候,在运行程序查看输出效果时,会出现窗口闪一下就关闭的情况. 在C语言中一般通过添加get ...

  2. python可以在linux运行_在linux运行python

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! linux下编译安装python3与python2共存linux下默认系统自带p ...

  3. Linux运行8086代码,* linux下编译,链接,运行,汇编程序

    当前使用的操作系统:ubuntu11.10 汇编程序由定义好的段构成,每个段都有不同的目的,三个最常用的段: 1)data 段 汇编程序data(数据)段是可选的. 数据段声明带有初始值的数据元素,这 ...

  4. linux运行16668端口,Linux 性能监控之命令行工具

    引言 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.这些命令行工具可以在各种Linux系统下使用,可以用于监控和查找产生性能问题的原因.这个命令行工具列表提供了足够的 ...

  5. linux显示编程语言语句,linux – 如何使用Glade / GtkD和D编程语言显示Hello World

    >安装在Mac,Linux或Windows计算机上编译D语言的DMD编译器.您可以获得有关此here的更多信息. >在Mac,Linux或Windows计算机上安装Glade界面设计器.使 ...

  6. linux运行游戏模拟器,Linux系统上安装ePSXe 1.6.0游戏模拟器

    下载Linux版本ePSXe模拟器! 官方网站下载:http://www.epsxe.com/download.php ePSXe v1.6.0 180 KB ePSXe executeable (L ...

  7. linux运行游戏模拟器,Linux安装ePSXe 1.6.0游戏模拟器 【转载】

    下载Linux版本ePSXe模拟器! 官方网站下载:http://www.epsxe.com/download.php ePSXe v1.6.0 180 KB ePSXe executeable (L ...

  8. window应用在linux运行,如何在Linux上运行Windows应用程序?

    原标题:如何在Linux上运行Windows应用程序? 一些人可能避免在Linux上运行Windows应用程序,但事实上有时候这么做大有帮助. 一些人无法摆脱Windows的最主要原因之一是可用的应用 ...

  9. db2 控制台执行创建函数语句_DB2数据库中创建定义函数

    本文将为您详细介绍DB2数据库中创建用户自定义行数,用以扩展扩展内置的 DB2 函数的方法,供您参考,希望对您有所帮助. 可以创建用户定义函数来扩展内置的 DB2 函数.例如,创建计算复杂的算术表达式 ...

  10. c++中的system函数

    system函数 是可以调用一些DOS命令,比如 system("cls");//清屏,等于在DOS上使用cls命令 下面列出常用的DOS命令,都可以用system函数调用: AS ...

最新文章

  1. WebStack-Hugo | 一个静态响应式网址导航主题
  2. linux的文件系统及节点表
  3. 自然语言系列学习之表示学习与知识获取(六)融合实体描述的知识表示和融合实体所在句子的知识表示
  4. 【Elasticsearch】Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布
  5. 玩转 SpringBoot 2.x 之 快速集成 Jedis客户端(普通版)
  6. SAS入门教程2---建立SAS数据集
  7. MIPI接口和DVP接口的区别及优点
  8. Linux指令系统文件复制到U盘
  9. Flutter气泡框实现
  10. matlab:正态分布的概率密度图形
  11. 联网监管与手册报关的区别
  12. 勿以恶小而为之,勿以善小而不为
  13. (已更新)全新商城微信小程序源码支持对接公众号
  14. 【天翼云服务器】新服务器centos环境搭建,按照docker环境,解决相关配置问题。
  15. 重学JavaWeb(3)JSON、AJAX
  16. template 的 用法
  17. QQ个性域名邮箱(免费企业邮箱)快速申请
  18. 开启Maven使用之路
  19. 数字化转型与智能创新100个案例
  20. QML QQuickView透明背景

热门文章

  1. FishC笔记—21 讲 函数:lambda表达式
  2. 西门子、RA、施耐德、三菱、汇川、和利时:中国PLC市场及产业链分析
  3. 算法竞赛入门经典题解目录
  4. 关于List转Json的简单方法
  5. 七号信令的消息结构(包括SCCP详解)
  6. Anaconda版本选择 Python3.6版本的Anaconda下载
  7. 三维重建开源项目汇总
  8. 安卓版LightBlue 低功耗蓝牙BLE设备调试
  9. 最值得收藏的 考研线性代数 全部知识点思维导图整理(张宇, 汤家凤), 附带惯用思维/做题技巧/易错点整理
  10. php拼音转为汉字方法二