学习fork函数

本文介绍了fork函数在进程中的作用,它用于创建子进程,并详细阐述了PID(进程ID)作为进程唯一标识的重要性。通过示例代码展示了如何使用fork函数并根据返回值判断进程类型,以及如何通过PID观察进程执行。
摘要由CSDN通过智能技术生成

什么是fork函数

fork函数是在进程中执行复制的一种函数,会在原本进行的程序中复制并创建出一个新进程,称之为子进程,原进程称为父进程,然后两者进程共存并一起执行。

什么是PID

PID是进程号,用来标识进程,一个进程号只能标识一个进程,且是唯一的。

如何通过PID观察fork函数

通过fork的返回值可以判断进程,如果出现错误,fork返回值为负值,如果在父进程中,fork的返回值为子进程的PID,如果在子进程中,fork的返回值为0。

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

int main(int argc, char *argv[])
{ 
    pid_t pid = fork();//创建子进程
    if(-1 == pid)
    {
        perror("fork");
        return -1;
    }

if(0 == pid)//子进程
{
    printf("Child process pid:%d  My parent process pid:%d\n",getpid(),getppid());
    exit(0);//进程退出函数
}
else if(pid > 0)//父进程
{
    //sleep(1);
    wait(NULL);//阻塞等待任意子进程结束并回收进程产生的资源 同时接收exit/_exit的退出状态值
    printf("parent pid:%d  My parent process pid:%d\n",getpid(),getppid());
    exit(0);
}

return 0;

}

引用:在Linux中,fork函数用于创建一个新的进程。它会复制父进程的数据空间、堆和栈,并将其作为子进程的副本。fork函数的返回值在子进程中为0,在父进程中为子进程的ID,出错时返回-1。 关于文件描述符的问题,文件描述符是对打开文件的引用。在fork函数调用之后,子进程会继承父进程的文件描述符。这意味着子进程可以访问到与父进程相同的打开文件。子进程会拥有父进程打开文件的副本,但是它们是独立的。也就是说,如果父进程或子进程修改了文件描述符,不会影响到对方的文件描述符。这样做可以实现进程间的独立性和隔离性。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [Linux学习?fork用法](https://download.csdn.net/download/weixin_38630697/14070621)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [分析fork后多进程对文件的共享](https://blog.csdn.net/weixin_34087307/article/details/94683295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值