system()调用始终以-1失败

时间:2016-10-14 06:04:38

标签: system

我有一个进程在system()调用时始终返回-1,但同一系统上的其他进程没有此错误。我无法理解为什么这个过程总是在system()调用中返回-1。用于调用system()的命令也是成功的。只是它总是返回-1。

1 个答案:

答案 0 :(得分: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$