fork()是linux中的系统调用函数,用于创建进程,创建失败返回-1,创建成功会返回两次(不是返回了两个值,而是返回了两次)。需要注意的是fork调用一次返回两次:对父进程而言它返回的是子进程的id,对子进程而言它返回0。
子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h> // 系统调用的封装
#include<sys/wait.h> //wait/waitpid时使用
int main()
{
printf("父进程! pid=%d\n",getpid());
pid_t p1id=fork(); //如果fork成功,会向父进程返回子进程的id,并向子进程0
printf("第一次%d\n",(int)p1id);
if(p1id<0)
{
printf("fork创建子进程1失败!\n");
exit(1);
}
else if(p1id==0)
{
for(int i=0;i<9;i++)
printf("这是子进程1,id为:%d,它的父进程id为:%d\n",(int)getpid(),(int)getppid());
return 0;