-1
system()
호출에서 항상 -1을 반환하는 프로세스가 있지만 같은 시스템의 다른 프로세스에는이 오류가 없습니다. 나는이 과정이 항상 system()
호출에서 -1을 반환하는 이유를 알 수 없다. system()
이 호출 된 명령도 성공적입니다. 그것은 항상 -1을 반환한다는 것입니다.시스템() 호출은 항상 -1로 실패합니다.
system()
호출에서 항상 -1을 반환하는 프로세스가 있지만 같은 시스템의 다른 프로세스에는이 오류가 없습니다. 나는이 과정이 항상 system()
호출에서 -1을 반환하는 이유를 알 수 없다. system()
이 호출 된 명령도 성공적입니다. 그것은 항상 -1을 반환한다는 것입니다.시스템() 호출은 항상 -1로 실패합니다.
문제는 해당 프로세스의 신호 (SIGCHLD, SIG_IGN) 때문입니다. SIGCHLD가 무시 될 때, waipid는 fork 후에 호출되어서는 안된다. 그러나 시스템 호출이 항상 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$