gpt4 book ai didi

c - 退出()或_退出()?

转载 作者:太空狗 更新时间:2023-10-29 15:22:27 27 4
gpt4 key购买 nike

考虑这段代码:

void do_child(void);

int main(void){
int n;
pid_t child;
printf("Write a number: ");
scanf("%d", &n);
if(n != 1){
exit(1);
}
child = fork();
if(child >= 0){ /* fork ok */
if(child == 0){
printf("Child pid: %d\n", getpid());
do_child();
_exit(0);
}
else{ /* parent */
printf("Child parent: %d\n", getpid());
_exit(0);
}
}
else{ /* fallito */
perror("No fork");
return 1;
}
return EXIT_SUCCESS;
}

void do_child(void){
/* some code here */
if(1 != 1){
/* what to write here?? _exit or exit*/
}
}

当从子进程退出时,最好写成 _exit 而不是 exit 但是如果我需要调用一个外部函数并进入这个函数我想放一个退出,我应该写什么? _exit 还是 exit

最佳答案

你可以期待exit调用用 atexit 注册的函数. _exit不会那样做。通常,每个已注册的清理处理程序都应该恰好执行一次,通常是在注册它的进程中执行。这意味着子进程应该 _exit() 而父进程应该 exit()。如果子进程做 exec一些其他程序,这可能是最常见的情况,那么该新程序将覆盖所有已注册的处理程序,这意味着您将返回到 exit()

至于外部函数:我会说你应该调用 exit 但你应该准备好遇到奇怪的行为,如果 parent 在做之前注册了非平凡的东西 atexit fork 。所以尽量早点 fork 除非你想在 child 中执行 exec 。并注意您自己的代码和您使用的库可能安装的退出处理程序。 I/O 缓冲区刷新就是一个例子。

关于c - 退出()或_退出()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12239645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com