我在程序函数中有这段代码。并且有一个测试脚本会命中此代码路径。脚本多次执行此函数(~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 次尝试后发生。