赞
踩
一、父进程创建子进程,使用fork(), 一次fork() 两次返回,一次返回的是父进程自己,一次返回的是子进程的运行空间。
二、父进程必须监控子进程的运行状态,等待子进程退出后,使用wait()进行关闭,否则,如果父进程先退出,子进程就没有父亲了,就变成了僵尸进程,此时退出时,就会被系统进程init监控到,然后由系统进程init进行关闭和释放资源。
三、运行下列的代码,结果如下:
[zhou@localhost code]$ ./a.out
I am child. my pid=3448 parent pid=3447
I am parent. my pid=3447
wait for child to exit ...
child pid = 3448 exit code=256
success for wait for child to exit.
[zhou@localhost code]$
- #include <unistd.h>
- #include <stdio.h>
- #include <errno.h>
-
-
- int main()
- {
- pid_t fpid;
- int count =0;
-
- fpid = fork();
- if( fpid < 0)
- {
- printf("\r\n error");
- }
- else if( 0 == fpid)
- {
- printf("I am child. my pid=%ld parent pid=%ld \r\n", (long)getpid(),(long)getppid());
- exit(1);
- }
- else
- {
- int exitcode = 0;
- long ret;
-
- sleep(1);
- printf("I am parent. my pid=%d \r\n", getpid());
-
- printf(" wait for child to exit ... \r\n");
- ret = wait(&exitcode);
- while( -1 != ret )
- {
- printf("child pid = %ld exit code=%d \r\n", ret, exitcode);
- if(errno == ECHILD) break;
-
- sleep(1);
- ret = wait(&exitcode);
- }
-
- printf(" success for wait for child to exit. \r\n");
- }
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。