“ ulimit -c无限制”已完成。这是代码:
main()
{
do
{
pid_t pid = fork();
int stat_loc;
if(pid < 0)
exit(1);
else if(pid > 0)
{
waitpid(pid, &stat_loc, 0);
sleep(5);
}
else
break;
}
while(1);
assert(0);
}
如果我用assert(0)代替sleep(5),父进程将转储核心。
答案 0 :(得分:0)
在应用程序should cause an abort的调试版本上调用assert(0):
如果此函数形式的宏的参数表达式比较等于零(即表达式为false),则会将一条消息写入标准错误设备并调用中止,从而终止程序执行。
您实际上想在这里做什么?您的派生逻辑似乎有问题。通常,您进行测试以查看pid == 0是否在子进程中,而pid> 0以查看是否在父进程中,like this:
pid_t pid = fork();
if (pid == 0) {
// child process because return value zero
printf("Hello from Child!\n");
} else if (pid > 0) {
// parent process because return value non-zero.
printf("Hello from Parent!\n");
} else {
printf("Error occurred.\n");
}
在您要查询的问题中,您要检查> 0和<0。
编辑:添加了错误检查分支。