一、创建进程
- fork()
pid_t fork(void)
fork函数调用成功,返回两次
返回值为0,代表当前进程是子进程
返回值为非负数,代表当前进程是父进程,返回的值刚好为子进程的pid
返回值-1,代表调用失败
代码示例:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
printf("father pid = %d\n",getpid());
pid = fork();
if(pid > 0){
printf("this is father print,pid = %d\n",getpid());
}else{
printf("this is son print, pid = %d\n",getpid());
}
return 0;
}
结果显示:
father pid = 9009
this is father print,pid = 9009
this is son print, pid = 9010
2.注意:fork创建的进程为fork之后的代码,父子进程都会运行fork之后的代码,但创建的子进程不会去拷贝fork之前的代码
示例:
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
int main()
{
pid_t pid;
pid_t pid2;
pid = getpid();
printf("before fork pid = %d\n",pid);
fork();
pid2 = getpid();
printf("after fork pid = %d\n",pid2);
if(pid == pid2){
printf("this is father print\n");
}else{
printf("this is son print, pid = %d\n",getpid());
}
return 0;
}
结果:
before fork pid = 9026
after fork pid = 9026
this is father print
after fork pid = 9027
this is son print, pid = 9027