一、Linux系统中C语言编程创建函数fork()执行解析
1. 简介
在Linux系统中,通过fork() 函数可以创建出一个子进程(child process),让子进程拥有与父进程(parent process)相同的代码和数据的副本,然后各自独立运行。它是用于创建新进程的系统调用,可以更简便地创建新进程并与该进程进行通信。
2. 语法
创建子进程的函数原型为:
#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);
函数调用成功时会返回两个值,分别是在父进程和子进程中得到的返回值,例如在子进程中返回的是0,而在父进程中则返回创建出的子进程的进程ID(process ID)。
3. 实例
实例1:父进程创建子进程,并在子进程中输出一句话。
#include <stdio.h>
#include <unistd.h>
void main() {
pid_t pid; // pid_t是指用于进程ID号的系统数据类型
char* message;
int n;
printf("fork program starting\n");
pid = fork();
switch (pid) {
case -1:
printf("fork failed\n"); // 创建失败,输出提示信息
break;
case 0:
message = "This is the child process";
n = 5;
break;
default:
message = "This is the parent process";
n = 3;
break;
}
// 在父子进程中都要输出的语句
for (; n > 0; n--) {
puts(message);
sleep(1);
}
}
实例2:拓展实例1,在子进程中再次创建子进程并输出两句话。
#include <stdio.h>
#include <unistd.h>
void main() {
pid_t pid1, pid2; // pid_t是指用于进程ID号的系统数据类型
char* message1;
char* message2;
int n;
printf("fork program starting\n");
pid1 = fork();
switch (pid1) {
case -1:
printf("fork failed\n");
break;
case 0:
message1 = "This is the child process1";
n = 2;
pid2 = fork();// 在第一个子进程中再次fork()函数创建第二个子进程
switch (pid2) {
case -1:
printf("fork failed\n");
break;
case 0:
message2 = "This is the child process2";
break;
default:
message2 = "This is the parent of child2";
break;
}
break;
default:
message1 = "This is the parent process";
n = 3;
break;
}
for (; n > 0; n--) {
if (pid1 == 0) {
puts(message1);// 在第一个子进程中输出message1
}
else {
if (pid2 == 0) {
puts(message2);// 在第二个子进程中输出message2
}
else {
puts(message1);// 在父进程中输出message1
}
}
sleep(1);
}
}
以上两个示例可以通过gcc编译器进行编译,具体命令行如下:
$gcc -o fork fork.c
然后在Linux系统终端环境中运行生成的可执行文件。
示例1输出结果:
fork program starting
This is the parent process
This is the child process
This is the child process
This is the child process
This is the child process
示例2输出结果:
fork program starting
This is the parent process
This is the child process1
This is the child process2
This is the child process1
This is the parent of child2
This is the child process1
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux系统中C语言编程创建函数fork()执行解析 - Python技术站