下面是我的代码的示例片
signal(SIGCHLD, SIG_IGN);
ret = system("ls -al");
if(ret < 0)
{
perror("system failed");
printf("return value is %d\n", ret);
}
的ls -al
命令可以没有任何问题地执行。
但返回值system()
始终是-1。 在这种情况下,我不能得到命令的实际返回值。
一些参考说,忽略SIGCHLD会影响waitpid()
在system()
这就是为什么system
总是返回-1。
但令我百思不解的更多的是:不SIGCHLD默认被忽略掉? 那么,为什么忽略SIGCHLD明确会导致这种情况?
可能有人给我讲解一下?
由于现在@cnicutar我明白忽略SIGCHLD的影响。
但现在我想知道有没有什么方法来获得子进程的返回值,而SIGCHLD被忽略? 或者这只是不可能的,因为POSIX规范和OS realizaiton?