日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

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

發布時間:2023/12/31 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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函数后时而程序崩溃,求助!!!...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。