一个fork()调用的例子

操作系统进程相关:一个fork()调用的例子。

调用fork()函数创建进程

程序 a 创建子进程,在子进程中输出自己的学号,并在子进程、父进程中分别输出当前被调度执行的进程pid,ppid。

1
// Linux 程序a
2
#include <stdio.h>
3
#include <sys/types.h>
4
#include <unistd.h>
5
#include <stdlib.h>
6
int main() {
7
    int pid;
8
    pid = fork();
9
    if(pid < 0) {
10
        printf("Fork failed.\n");
11
        exit(1);
12
    } else if(pid == 0) {
13
        printf("2016xxxxxxxxx\n");
14
        printf("Child's pid=%d\n", getpid());
15
        printf("Child's ppid=%d\n", getppid());
16
    } else {
17
        wait();
18
        printf("Parent's pid=%d\n", getpid());
19
        printf("Parent's ppid=%d\n", getppid());
20
    }
21
    exit(0);
22
    return 0;
23
}

调用exec系函数执行其他可执行文件

程序 b 在创建的子进程中调用exec系函数,执行前一个要求中生成的程序即a.exe,也可选择其它可执行文件作为exec函数的参数。

1
// Linux 程序b
2
#include <stdio.h>
3
#include <sys/types.h>
4
#include <unistd.h>
5
#include <stdlib.h>
6
int main(int argc, char *argv[], char **environ) {
7
    int pid;
8
    pid = fork();
9
    if(pid < 0) {
10
        printf("Fork failed.\n");
11
        exit(1);
12
    } else if(pid == 0) {
13
        printf("Call another program a.out.\n");
14
        execve("a.out", argv, environ);
15
    }
16
    exit(0);
17
    return 0;
18
}