📜  c fork wait for child - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:13:46.015000             🧑  作者: Mango

C语言中的fork和wait函数

在C语言中,fork()wait()函数是用于创建子进程和回收子进程资源的重要函数。本文将介绍这两个函数的作用和用法。

fork函数

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()函数用于回收子进程的资源,防止它成为“僵尸进程”。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()函数的基本用法。需要注意的是,在使用这些函数的时候,应该避免出现死锁等问题,以保证程序的正确性和稳定性。