我在程序功能中有这段代码。 并且有一个测试脚本可以访问此代码路径。 脚本多次执行此函数(~1000)。
fork()调用成功,因为我可以看到来自父块syslog的子pid,但是我没有看到来自子块的任何内容。
这不会永远发生。在一百次尝试中只发生过一次。
知道发生这种情况的一般原因是什么。
我应该寻找什么才能获得有关失败的更多信息。
int i;
if ((i = fork()) < 0) {
syslog(LOG_NOTICE, "(%s): fork failed!\n", __func__);
}
if (i) {
syslog(LOG_NOTICE, "(%s): fork Parent: id: %d\n", __func__, i);
} else {
syslog(LOG_NOTICE, "(%s): fork child\n", __func__);
/* Do something */
}
Output:
telnetd[24600]: (startslave): fork Parent: id: 24601
<Thats it, no log after this!!>
确切地说,这是freeBSD telnetd startslave()代码的一部分,脚本只是尝试使用telnet登录并注销1000次,有时会失败。失败是有保证的,可能发生在100次尝试之后或者可能在700次尝试之后。