【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变量,互不影响的
但这样造成的问题就是父子进程无法通过用户空间的变量进行数据通信
解决进程间通信的手段有很多,比如管道、信号通信、共享内存、消息队列、信号灯,后面的博客再一一介绍