#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
int ipid;
int istatus;
int pid;
ipid = fork();
printf("ipid=%d\n", ipid);
if (ipid < 0)
{
printf("fork fail...\n");
exit(1);
}
else if (ipid == 0)
{
//fork返回值为0标识为子进程
printf("child process...\n");
printf("child_pid=%d, parent_pid=%d\n", getpid(), getppid());
printf("child process exit...\n");
exit(2);
}
else //fork返回值大于0标识为父进程,父进程调用wait用于等待子进程退出并释放资源
{
printf("parent...\n");
pid=wait(&istatus);
istatus = istatus >>8;
printf("get child process exit code=%d\n", istatus);
printf("get child_pid=%d, parent_pid=%d\n", pid, getpid());
printf("parent process exit...\n");
}
}
输出:
parent…
child process…
pid=24435, ppid=24434
parent exit…
status=2
mypid=24435
- fork():返回值等于0,子进程;大于0,父进程。防止子进程先与父进程退出,在父进程中使用wait()函数,参数可以为NULL,为了获取子进程的退出的状态码,可以传入参数,并右移动8位。函数返回值作为子进程的pid。
- getpid():或者当前进程的pid。
- getppid():获取父进程的pid.-