1. 程式人生 > >system函式的分析以及總結

system函式的分析以及總結

看到這裡,你可能會說,問題都是SIGCHLD訊號處理函式中的wait惹的禍,如果去掉SIGCHLD訊號處理函式中的wait函式,不就不會帶來上述的兩個問題了嗎? 我的答案是:的確可以避免上述兩個問題,即system函式可以正確的獲取子程序的退出狀態。但是這樣做還是會有問題的:我們先不管在SIGCHLD訊號處理函式中不呼叫wait系列函式這種不正統的做法,我們在這裡考慮這樣一種情形:如果訊號處理函式需要執行一分鐘的時間才返回(實際程式設計中,訊號處理函式要儘量短噢,這裡只是一種極端的假設),那麼system函式豈不是也要阻塞一分鐘才能返回?因為如果不阻塞SIGCHLD訊號並且主程序註冊了SIGCHLD訊號處理函式(未呼叫wait系列函式),那麼就需要等主程序的訊號處理函式返回後waitpid才能接受到子程序的退出狀態,也就是訊號處理函式需要執行多長時間,那麼system也就需要這麼多時間才能返回。一個函式的執行受到外界不確定因素的影響,這種情形還是應該避免的。所以在呼叫system函式的時候阻塞SIGCHLD,這樣在執行期間訊號被阻塞就不會呼叫訊號處理函數了,system中的waitpid就能"及時"地獲取到子程序的狀態。-- 但是仔細想想,其實system函式還是避免不了這種情形的,因為在最後呼叫sigprocmask解除阻塞時(一般在sigprocmask返回之前,就至少遞送一個阻塞的訊號),還是會呼叫訊號處理函式,system依然會阻塞,唯一的不同是,這種情況下waitpid是在呼叫訊號處理函式之前就獲取了子程序的退出狀態,避免了多執行緒的諸多影響。所以,在平時的程式設計實踐當中,訊號處理函式要儘量的短,這樣才不會對其他函式造成不必要的未知影響。

相關推薦

system函式分析以及總結

看到這裡,你可能會說,問題都是SIGCHLD訊號處理函式中的wait惹的禍,如果去掉SIGCHLD訊號處理函式中的wait函式,不就不會帶來上述的兩個問題了嗎? 我的答案是:的確可以避免上述兩個問題,即system函式可以正確的獲取子程序的退出狀態。但是這樣做還是會有問題的:我們先不管在SIGCHLD訊號處理

openCV中的findHomography函式分析以及RANSAC演算法的詳解(原始碼分析

本文將openCV中的RANSAC程式碼全部挑選出來,進行分析和講解,以便大家更好的理解RANSAC演算法。程式碼我都試過,可以直接執行。 在計算機視覺和影象處理等很多領域,都需要用到RANSAC演算法。openCV中也有封裝好的RANSAC演算法,以便於人們使用。關於RA

system函式分析

windows中的情況也類似,就是execl換了個又臭又長的名字,引數名也換的看了讓人發暈的,我在MSDN中找到了原型,給大家看看: HINSTANCE   ShellExecute(                HWND  hwnd,                LPCTSTR  lpVerb,    

總結:windows下性能分析以及優化報告

快的 size 輸出結果 -s bsp 實現 替代 部分 個性        性能分析以及優化   使用的是vs2017自帶的性能分析工具。   主要分析了遇到的性能瓶頸,以及想到的優化方法,有的驗證了,有的沒有來得及。   首先看整體用時以及cpu占有率。   最終

2018年第九屆藍橋杯省賽C++A組題目分析以及思路總結

    第九屆藍橋杯省選在4月初結束了,最近也出了成績,因為是第一次參加藍橋杯,出結果前有些緊張,不過結果也算是意料之中,成功晉級了國賽了,在這裡總結一下我做題的思路,當然,只說一下解出來的題,有些題因為時間關係,考場上選擇了得分價效比方式而不是複雜的標準解。第一題 分數1/

大資料學習之Scala中main函式分析以及基本規則(2)

一、main函式的分析 首先來看我們在上一節最後看到的這個程式,我們先來簡單的分析一下,有助於後面的學習 object HelloScala { def main(args: Array[String]): Unit = { printl

JavaScript基礎函式和詞法分析以及常用的內建物件和使用方法(4)

day52 參考:https://www.cnblogs.com/liwenzhou/p/8004649.html 函式 函式定義 JavaScript中的函式和Python中的非常類似,只是定義方式有點區別。 function foo(a, b) { console.log("a:"

關於system函式返回值的總結

sprintf(temp,"sqlite3 %s \".dump\" | sqlite3 %s",argv[1],argv[3]);    printf("the string is %s\n",temp);    stat = system(temp);     if(-

VC運行庫版本不同導致鏈接.LIB靜態庫時發生重復定義問題的一個案例分析總結

修改 borde 並且 release 鏈接 部分 sdn 托管代碼 兩個 MSDN中對於在不同的配置下Link的LIB作了說明: C Runtime Library: 開關 對應的庫 版本 /MD

SQL Server 磁盤請求超時的833錯誤原因分析以及解決

ger ssa sage blog htm 好的 發生 如何 tle 本文出處:http://www.cnblogs.com/wy123/p/6984885.html 最近遇到一個SQL Server服務器響應極度緩慢,並且出現客戶端請求報錯的情況,在數

Android 進程常駐(5)----開機廣播的簡單守護以及總結

ibm col 組合 win 要點 思考 eas 三星 殺死 這是一個輕量級的庫,配置幾行代碼。就能夠實如今android上實現進程常駐,也就是在系統強殺下,以及360獲取root權限下。clean master獲取root權限下都無法殺死進程 支持系統2.3

關於linux下system()函數的總結

min ons 了解 shell 等我 exe urn per pro 先來看一下system()函數的簡單介紹: #include int system(const char *command) system()函數調用/bin/sh來執行參數指定的命令,/bin/sh

SELECT TOP 1 比不加TOP 1 慢的原因分析以及SELECT TOP 1語句執行計劃預估原理

create p s 總結 字段 不用 value tar 再次 char   現實中遇到過到這麽一種情況:   在某些特殊場景下:進行查詢的時候,加了TOP 1比不加TOP 1要慢(而且是慢很多)的情況,   也就是說對於符合條件的某種的數據,查詢1條(符合該條件)數據比

大數據學習之Scala中main函數的分析以及基本規則(2)

語言 python rgs 數字 popu 結束 圖片 區別 返回 一、main函數的分析 首先來看我們在上一節最後看到的這個程序,我們先來簡單的分析一下。有助於後面的學習 object HelloScala { def main(args:

web安全掃描問題(常見的)分析以及解決方式

檢測 掃描 安全問題這是我上午掃描的一個網站很多地方地方不懂 在網上查了嚴重問題有Session fixtion,vulnerable javascript library..1.什麽是session fixation攻擊 Session fixation有人翻譯成“Session完成攻擊”,實際上fixat

Bug預防體系(上千bug分析總結的最佳實踐)

常常 chrome initial 請求 off 目的 進行 同步 產品需求 Bug預防體系(上千bug分析後總結的最佳實踐) 原創 2017-08-16俞美玲 光榮之路 吳老的《selenium webdriver 實戰寶典》出版了! web常見產品問題及預

無源晶振加反相器變有源分析總結

bbb 功耗 高頻 指定 信號 只需要 防止 class 引腳 轉自“電子產品世界” 1.晶體和晶振 通常,我們會將“晶體”(Crystal)和“晶振”(Oscillator)都叫成“晶振”,其實這種叫法並不恰當。 無源晶體是有兩個引腳的無極性元件,如圖1(a)。正常工作時

MySQL的SQL執行性能分析以及性能優化策略和步驟

itl com pos url sql href class 分析 www. MySQL 的性能(下篇)—— 性能優化方法MySQL的SQL執行性能分析以及性能優化策略和步驟

Android中Parcel的分析以及使用

label nbsp default ext ews nal itl activit tag 簡單點來說:Parcel就是一個存放讀取數據的容器, Android系統中的binder進程間通信(IPC)就使用了Parcel類來進行客戶端與服務端數據的交互,而且AIDL的數據

VINS-Mono代碼分析總結(二) 系統初始化

exp 簡單 都是 最小值 cnblogs 特征向量 vision 還要 per VINS-Mono代碼註釋:https://github.com/gaochq/VINS-Mono/tree/comment 註釋不完整,可以一起交流。 參考文獻 1 VINS-Mono: A