一、函数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;
}

输出结果:

函数fork vfork

 

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;
}

输出结果:

函数fork vfork

相关文章: