2016-10-14 3 views
-1

私はsystem()コールで常に-1を返すプロセスを持っていますが、同じシステム上の他のプロセスにはこのエラーはありません。私はこのプロセスがなぜsystem()コールで-1を返すのか断然です。 system()が呼び出されたコマンドも正常に実行されます。それは常に-1を返します。system()コールは常に-1で失敗する

答えて

0

問題は、そのプロセスのシグナル(SIGCHLD、SIG_IGN)によるものです。 SIGCHLDを無視すると、forkの後にwaipidを呼び出さないでください。 しかし、システムコールは常にwaitpidを呼び出すように見え、システムは-1を返します。

#include <signal.h> 
#include <errno.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 


int main() 
{ 
    int ret = 0; 
    signal(SIGCHLD, SIG_IGN); 

    ret = system("echo hello!!"); 
    printf("ret=%d errno=%d error=%s\n",ret,errno,strerror(errno)); 

} 

bash-3.2$ ./a.out 
hello!! 
ret=-1 errno=10 error=No child processes 
bash-3.2$ 
関連する問題