一、函数fork
fork函数原型:
#include <unistd.h>
pid_t fork(void);
返回值:子进程返回0,父进程返回子进程ID;若出错,返回-1
二、程序清单
1. 测试代码:
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid;
for(int i = 0; i < 4; ++i){
printf("--------i = %d\n", i);
}
pid = fork();
if(pid > 0) {
printf("parent process, pid = %d\n", getpid());
} else if(pid == 0){
printf("child process, pid = %d, ppid = %d\n", getpid(), getppid());
}
for(int i = 0; i < 4; ++i) {
printf("i = %d\n", i);
}
return 0;
}
输出结果:
2. 测试代码:
#include <stdio.h>
#include <unistd.h>
int counter = 200;
int main()
{
int number = 5;
int i;
pid_t pid;
for(i = 0; i < number; ++i) {
pid = fork();
if(pid == 0) {
break;
}
}
if(i == 0){
counter += 200;
printf("first process, pid = %d\n", getpid());
printf("-----couner = %d\n", counter);
}
if(i == 1){
counter += 200;
printf("second process, pid = %d\n", getpid());
printf("-----couner = %d\n", counter);
}
if(i == 2){
counter += 200;
printf("thrid process, pid = %d\n", getpid());
printf("-----couner = %d\n", counter);
}
if(i == number){
sleep(3);
counter += 400;
printf("parent process, pid = %d\n", getpid());
printf("-----couner = %d\n", counter);
}
return 0;
}
输出结果: