fork()
从已存在的进程中创建新进程。原进程被称为父进程,新进程被称为子进程。用fork()得到的子进程是父进程的复制品,子进程独有的只有它的进程号、资源使用和计时器。
头文件:
#include <unistd.h>
#include <sys/types.h> //提供类型pid_t的定义
函数原型:pid_t fork();
函数返回值:
0:子进程
子进程PID(大于0的整数):父进程
-1:出错
因为子进程几乎是父进程的完全复制,两个进程会运行同一个程序。因此需要一种方式来区分它们。代码如下:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a = 2;
pid_t pid = fork(); //创建一个新的进程
if(pid < 0) //创建出错
{
perror("fork");
return -1;
}
if(pid == 0) //子进程
{
int n = 10;
while(n--)
{
printf("im child a = %d &a = %p pid = %d\n", a, &a, getpid());
sleep(1);
}
}
else //父进程
{
while(1)
{
printf("im parent a = %d &a = %p pid = %d\n", a, &a, getpid());
sleep(1);
}
}
return 0;
}