/tmp/tmpFlashInfo.file"),用于检....">

当前位置:  技术问答>linux和unix

linux多线程中使用system函数后时而程序崩溃,求助!!!

    来源: 互联网  发布时间:2016-11-18

    本文导语:  本帖最后由 sz_hiter 于 2010-09-05 15:07:33 编辑 如题。 本程序有7个线程,其中一个线程(简称sys线程把。。)每秒会调用几次system函数(例如system("df -h > /tmp/tmpFlashInfo.file"),用于检查Flash的占用情况)。 我主要做了如...

本帖最后由 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的文件指针。

    
 
 

您可能感兴趣的文章:

  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?)
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 求个linux多线程编程的例子,要有线程池的 通用些更好
  • 请问Linux下线程开销为什么这么大?一个线程要占用近10M内存
  • Linux多线程时一些线程分不到时间片
  • 说说windows线程和linux线程的区别?
  • linux 下多线程 每个线程能否使用alarm来处理,信号是否会乱呢?
  • linux下,如何在多线程中每个线程设置一个定时器,在线等,急。。。谢谢
  • 在创建linux线程时为什么会多一个线程?
  • linux如何主动将线程放入到线程调度队列中重新排队?
  • 在linux RH73下为什么单进程只能开1021个线程线程.
  • Linux下如何让主线程挂起一个指定的时间段而子线程继续运行?谢谢
  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?) iis7站长之家
  • linux线程编程问题
  • linux线程最大数,奇怪,怎么只有300?而且线程是用完就没了,不是同时300啊!
  • 跪求:linux下pthread 双线程计算和单线程的运行时间完全相同是为什么?
  • linux线程与进程的问题
  • linux 下子线程不能执行的问题?
  • linux多线程编程的问题
  • linux多线程编程
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • linux c下利用srand和rand函数生成随机字符串
  • 哪位大侠有unix/linux的函数和函数所在的文件
  • Linux下c基于openssl生成MD5的函数
  • linux中,动态库中的函数如何调用静态库中的函数
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • linux下自带了soup函数库和XML处理函数库了吗?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • RedHat linux8.0中的KDE经常无故崩溃,为什么呢?
  • linux网络模块什么时候会导致内核崩溃啊
  • linux 系统崩溃
  • 我VM的linux启动时提示:应用程序似乎即将崩溃..
  • linux桌面容易be崩溃问题
  • 很奇怪的问题:linux下tcp send导致服务器进程崩溃
  • 请教下各路高手,linux是如何检测内核崩溃的
  • linux高手请帮忙,系统崩溃,段错误!!!
  • 【江湖求救】用VMware station 安装linux出现这样的错误提示 崩溃了
  • 靠,昨天装好linux,今天他就崩溃了,我实在没什么耐心去用它了。
  • 我以一个Linux的user登录进去,从任务拦用鼠标右键新建一个Launcher时总是出现程序崩溃的错误,而从桌面新建Launcher就没问题,别的user
  • 双linux服务器如何能在一台服务器崩溃的情况下在另一台服务器上启动相应服务
  • 求助:linux程序崩溃了,但不知道问题在哪里,有什么好的解决方法么?
  • 偶的Linux系统崩溃了,快救救我啊(在线等待)
  • linux的rpm小问题,我要崩溃了!
  • 我在虚拟机内安装了LINUX系统,却不能上网??崩溃啊!!!
  • linux下监视进程 崩溃挂掉后自动重启的shell脚本
  • Linux下多线程程序崩溃时如何提取出所有线程的函数调用栈
  • 我的linux崩溃了
  • 在原有linux和2000共存得情况下,2000崩溃,重装2000的问题,
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3