操作系统进程相关:一个fork()调用的例子。
调用fork()函数创建进程
程序 a 创建子进程,在子进程中输出自己的学号,并在子进程、父进程中分别输出当前被调度执行的进程pid,ppid。
1 | // Linux 程序a |
2 |
|
3 |
|
4 |
|
5 |
|
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 |
|
3 |
|
4 |
|
5 |
|
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 | } |