system呼叫與SIGCHLD訊號

2022-07-20 20:33:13 字數 475 閱讀 6502

很多時候,我們需要通過system這個函式在程式內部來執行系統命令。

比如:int

rv =

system(

"mount /mnt/hgfs");

最近有同事發現system呼叫返回-1,但事實上外部命令已成功執行。

經調查發現,原來是server在啟動後將自己設定為daemon時,遮蔽了sigchld訊號導致的。在某些linux核心版本下,遮蔽sigchld訊號會導致system呼叫返回-1(經查,linux2.6核心以上無此問題)。system呼叫執行的流程應該是: fork->execve->waitpid,在某些核心實現中,可能沒有恢復sigchld訊號,由此導致waitpid失敗。

在system呼叫之前,應該手工恢復sigchld訊號:

signal(sigchld, sig_dfl);

intrv 

=system(

"mount /mnt/hgfs");

system函式呼叫

相關函式 fork,execve,waitpid,popen 表頭檔案 include 定義函式 int system const char string 函式說明 system 會呼叫fork 產生子程序,由子程序來呼叫 bin sh c string來執行引數string字串所代表的命令,此命 ...

system系統呼叫的使用

system 系統呼叫在應用中很廣泛 可以直接在c 中呼叫命令,執行一些特殊操作,用法如下.1.直接執行命令 可以在c檔案中直接執行命令,這是基本用法,例如 system mkdir test system chmod 777 test.bin 等等 2.如果需要執行的命令是變動的,則可以使用字串變...

popen的用法及與system呼叫的區別

首先用man檢視下popen的介紹 popen,pclose pipe stream to or from a process include file popen const char command,const char type int pclose file stream popen總是和p...