一、父进程创建子进程,使用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;
}