关于linux的fork用法的思考---读CSAPP
2012-11-20 15:20
295 查看
#include "apue.h" #include <sys/wait.h> int main(void) { pid_t pid; int status; if ((pid = fork()) < 0) { printf("fork error\n"); } else if (pid == 0) exit(7); if (wait(&status) != pid) /* wait for child. */ printf("wait error.\n"); pr_exit(status); if ((pid = fork()) < 0) printf("fork error.\n"); else if (pid == 0) abort(); if (wait(&status) != pid) printf("wait error.\n"); pr_exit(status); printf("-----66666--------------------------------------------------.\n"); if ((pid = fork()) < 0) { printf("fork error.\n"); } else if (pid == 0) { printf("->>>>>>>>>>>>>>>...\n"); // exit(0); } // status /= 0; // printf("---77777--------------------------------------------------------.\n"); if (wait(&status) != pid) printf("wait error.\n"); // printf("-----------------------------------------------------------.\n"); pr_exit(status); exit(0); }此时的运行结果很是为:
normal termination, exit status = 7
abnormal termination, signal number = 6
-----66666--------------------------------------------------.
->>>>>>>>>>>>>>>...
wait error.
abnormal termination, signal number = 6
normal termination, exit status = 0
后来才明白,当我最后一次fork的时候, 没有把子进程exit后, 子进程一直运行, 之后会运行 if (wait(&status) != pid), 而他没有自己任何的子进程,故打印出 wait error. 此时staus的状态还是上一次留下来的6。此时刻, 父进程一直在wait,当子进程调用exit(0)后, 父进程才得以运行。故有以上打印。
相关文章推荐
- 关于linux系统调用fork()的一道面试题
- 关于一些Linux命令的格式及用法(Linux就业班第二次作业)[修改版]
- [linux] 关于linux中vi编辑的用法
- linux 关于减号 - 代替stdin 和stdout 的用法
- 关于cocos2d-x几种画图方法的用法与思考
- linux多进程的总结(fork用法)
- Linux中关于scp的用法
- 关于linux下的fork()函数
- linux关于watch的用法
- 关于linux kernel slab内存管理的一点思考
- Linux系统调用fork()用法详解
- 关于linux-centos-samba用法
- Linux系统调用fork()用法详解
- linux:关于fork()的例题
- linux中fork函数的一个小思考
- 简单掌握Linux系统中fork()函数创建子进程的用法
- 【Linux开发】linux中关于dma_alloc_coherent的用法
- 关于Linux中top命令用法的详解
- 一道关于Linux系统下fork系统调用的面试题
- linux学习笔记:关于多级fork后的scanf输入的疑惑