基于以下代码,分析_exit()与exit()在进程退出时的不同行为,结合行缓冲机制,如果调用_exit()函数结束进程并打印父进程信息,应该怎样操作:#include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #include <stdlib.h> #include <fcntl.h> int global=22; char buf[]="the test content!\n"; int mai
时间: 2023-06-23 17:08:19 浏览: 93
n() {
int var=88;
pid_t pid;
int fd;
if ((fd=open("testfile",O_CREAT|O_WRONLY|O_TRUNC,0644)) <0) {
perror("open error");
exit(1);
}
if (write(fd,buf,sizeof(buf)-1) != sizeof(buf)-1) {
perror("write error");
exit(1);
}
printf("before fork\n");
if ((pid=fork())<0) {
perror("fork error");
exit(1);
} else if (pid==0) {
global++;
var++;
printf("child changed\n");
printf("global=%d, var=%d\n",global,var);
// exit(0);
_exit(0);
}
if (waitpid(pid,NULL,0)<0) {
perror("waitpid error");
exit(1);
}
printf("parent changed\n");
printf("global=%d, var=%d\n",global,var);
exit(0);
}
1. _exit()与exit()的区别在于_exit()是直接终止进程,而exit()则是先执行一些清理工作(如调用函数库中的清理函数),然后再终止进程。
2. 在本代码中,如果使用_exit()函数结束进程并打印父进程信息,应该在子进程中添加以下代码:
```
printf("parent process id=%d\n", getppid());
_exit(0);
```
这样子进程就会直接终止,同时打印出父进程的进程ID。如果使用exit()函数,则需要在子进程中添加清理函数并调用exit()函数来结束进程。
阅读全文