【Linux之进程间通信】01.fork函数

本文介绍了Linux中的fork函数,用于创建子进程。fork函数在父进程中返回子进程ID,在子进程中返回0。示例代码展示了父子进程如何执行不同的操作。文章还提到,由于父子进程的变量复制,它们无法直接通过用户空间变量通信,因此引出了进程间通信的话题,如管道、信号、共享内存等方法。
摘要由CSDN通过智能技术生成

 
【Linux之进程间通信】

项目代码获取:https://gitee.com/chenshao777/linux-processes.git
(麻烦点个免费的Star哦,您的Star就是我的写作动力!)

01.fork函数

pid_t fork(void);

fork()函数的作用产生一个一模一样的子进程
返回值:
   返回两个值
   对于主进程来说返回的是子进程的pid
   对于子进程来说返回是0

代码例子:

#include <unistd.h>  
#include <stdio.h>  
int main(void)  
{  
    pid_t pid_f;
    int count = 0;
    printf("pid of main = %d\n", getpid());

    /*  返回的两个值
        对于主进程来说返回的是子进程的pid
        对于子进程来说返回是0  */
    pid_f = fork();
    if(pid_f > 0){
        count++;
        printf("我是父进程, count = %d\n", count);
        printf("我是父进程, pid = %d pid_f = %d\n", getpid(), pid_f);
    }else{
        count++;
        printf("我是子进程, count = %d\n", count);
        printf("我是子进程, pid = %d pid_f = %d\n", getpid(), pid_f);
    }

    return 0;  
}  

编译运行

hc@hc-vm:~/Linux_ARM/git/linux-processes/01.进程编程fork()$ gcc 01.fork.c -o fork
hc@hc-vm:~/Linux_ARM/git/linux-processes/01.进程编程fork()$ ./fork
pid of main = 72712
我是父进程, count = 1
我是父进程, pid = 72712 pid_f = 72713
我是子进程, count = 1
我是子进程, pid = 72713 pid_f = 0

印证了fork()在父进程中返回的值是子进程的pid
子进程中fork()的返回值是0,因为子进程没有子进程

且可以发现子进程复制了一份父进程的变量,他们对count++的操作均是自己的count变量,互不影响
但这样造成的问题就是父子进程无法通过用户空间的变量进行数据通信
解决进程间通信的手段有很多,比如管道、信号通信、共享内存、消息队列、信号灯,后面的博客再一一介绍

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值