📅  最后修改于: 2023-12-03 15:13:46.015000             🧑  作者: Mango
在C语言中,fork()
和wait()
函数是用于创建子进程和回收子进程资源的重要函数。本文将介绍这两个函数的作用和用法。
fork()
函数用于创建一个新的进程,该新进程与调用fork()
的进程(也称为“父进程”)完全相同,包括进程的代码、数据、堆栈等。创建新进程后,它拥有自己的PID(进程标识符)。fork()
函数的语法如下:
#include <unistd.h>
pid_t fork(void);
fork()
函数的返回值有以下含义:
-1
,表示创建进程失败。0
,表示当前进程为子进程。0
,表示当前进程为父进程,返回值为子进程的PID。以下是一个简单的使用fork()
函数来创建子进程的示例:
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
printf("Failed to create child process!\n");
return -1;
} else if (pid == 0) {
printf("This message is from child process!\n");
} else {
printf("This message is from parent process!\n");
}
return 0;
}
当上述代码运行时,将输出如下信息:
This message is from parent process!
This message is from child process!
wait()
函数用于回收子进程的资源,防止它成为“僵尸进程”。wait()
函数的语法如下:
#include <sys/types.h>
#include <sys/wait.h>
pid_t wait(int *status);
wait()
函数的参数status
是一个指向整数的指针,用于存储子进程的退出状态(如果不关心子进程的退出状态,可以把status
设置为NULL
)。wait()
函数的返回值为退出的子进程的PID,如果没有可等待的子进程,则返回-1
。
以下是一个使用fork()
函数和wait()
函数一起创建和回收子进程的示例:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
pid_t pid = fork();
if (pid == -1) {
printf("Failed to create child process!\n");
return -1;
} else if (pid == 0) {
printf("This message is from child process!\n");
return 0;
} else {
printf("This message is from parent process!\n");
int status;
pid_t child_pid = wait(&status);
printf("Child process (PID %d) exited with status %d.\n", child_pid, status);
}
return 0;
}
当上述代码运行时,将输出如下信息:
This message is from parent process!
This message is from child process!
Child process (PID [PID值]) exited with status 0.
以上就是fork()
和wait()
函数的基本用法。需要注意的是,在使用这些函数的时候,应该避免出现死锁等问题,以保证程序的正确性和稳定性。