Linux中fork函数用于在一个进程中创建一个新的子进程,先看看其定义:
#include<unistd.h>
#include<sys/types.h>
函数定义: pid_t fork( void);
pid_t 是一个宏定义,其实质是int, 被定义在#include<sys/types.h>中,虽然fork是被调用了一次,但是这个函数却会返回两次,
在子进程中,这个函数会返回0,在父进程中这个函数返回的是子进程的进程id(大于0),子进程是对父进程的复制(duplicate)
而不是共享空间。
当一个父进程fork了一个子进程的时候是需要等待这个子进程结束后将这个子进程的资源回收的,但是一般情况下如果parent进程
并没有等待子进程结束,自己先提前结束的话,init进程会将child进程接管,并且将其资源回收,使用的函数是waitpid
在子进程结束的时候内核会向父进程发送SIGCHLD信号,如果父进程将这个信号屏蔽掉,然后父进程并没有等待子进程结束那么
子进程就会变为僵尸进程.(Z)
【参考资料】
1:http://baike.baidu.com/view/1952900.htm
2:man手册
3:http://www.ibm.com/developerworks/cn/linux/kernel/syscall/part2/
4:http://hi.baidu.com/q%C4%AB%B9%E6%B3%D8q/blog/item/feef2e23a6c15deed6cae2c8.html
5:http://wenku.baidu.com/view/fdf2be956bec0975f465e2b4.html