linux系统函数fork()详解

本文详细介绍了fork函数的功能及其在进程创建中的应用。fork函数用于创建一个与父进程几乎完全相同的子进程,子进程随后可以执行不同于父进程的操作。文章还探讨了父进程与子进程之间的相似性和区别,并提供了一个简单的示例程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fork 是干什么的呢?

fork的作用就是创建一个新的进程。

 

它的函数模型如下:

#include<unistd.h>

#include<sys/types.h>

 

pid_t fork(void);

fork函数是从当前进程中重新创建一个新的进程。这个进程被称作是子进程,而原来的进程被称为父进程。而这个

子进程大部分都是从父进程那里复制而来的。在最下面我列出了他们之间的异同点。

fork函数调用一次,有两个返回值。 如果是父进程则会返回子进程的PID号, 如果是子进程则会返回0.系统就是

通过这两个返回值的不同来判断是子进程还是父进程。

 

#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main()
{
    pid_t pid;
    char *message;
    int n;

    printf("fork program starting/n");
    pid = fork();
    switch(pid)
    {
    case -1:
        perror("fork failed");
        exit(1);
    case 0:
        message = "This is the child1";
        n = 5;
        break;
    default:
        message = "This is the parent2";
        n = 3;
        break;
    }

    for(; n > 0; n--) {
        puts(message);
        sleep(5);
    }
    exit(0);
}
这是一个有关fork()函数的应用。

 流程图

 

 

子进程和父进程相同点:

进程的资格(真实(real)/有效(effective)/已保存(saved) 用户号(UIDs)和组号(GIDs))

环境(environment)

堆栈

内存

打开文件的描述符(注意对应的文件的位置由父子进程共享, 这会引起含糊情况)

信号(signal)控制设定

nice值 (译者注:nice值由nice函数设定,该值表示进程的优先级, 数值越小,优先级越高)

进程调度类别(scheduler class)

当前工作目录

根目录

或许还有其他的,我不完全知道。

 

 

子进程独有的有:

进程号

不同的父进程号

自己的文件描述符和目录流的拷贝

资源使用(resource utilizations)设定为0

阻塞信号集初始化为空集

不继承由timer_create函数创建的计时器

不继承异步输入和输出

如果有什么不对的地方,还请多多指教。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值