linux 父子进程 资源_linux下的父进程和子进程

首先理解几个概念

1.程序:就是我们日常所写的代码。

2.进程:程序在计算机中运行的实体。程序被加载到计算机内存中运行,即进行中的程序。不同进程间有用独立的内存

3.线程:程序执行流的最小单位,系统调度和分派的基本单位。一个进程至少拥有一个线程。一个进程中不同的线程可以共享内存资源,所以不同线程之间切换的消耗比进程小

IPC通信的几种方式:

1.管道:通常指无名管道,它是半双工的,同一个时间只能一头读,一头写。而且他只能用于具有血缘关系的进程间通信(父进程与子进程)

2.FIFO:命名管道

3.消息队列:消息的链接表

4.信号量:它是一个计数器。信号量用于实现进程间互斥与同步。

5.共享内存:顾名思义,指多个进程间共享一块给定的存储区。

以上五中通信方式的总结。

1.管道:速度慢,容量有限,而且只能用于父子进程之间通讯

2.命名管道:任意进程之间都可以使用,但是速度慢。

3.消息队列:容量受到系统限制,且第一次读的时候,要考虑上一次没有读完的数据的问题

4.信息量:不能用来传递复杂数据,只能用来同步

5.共享内存:能够很容易的控制容量,速度快。但是要保持同步,要注意锁的问题。防止一个进程在读的时候,另一个进程在写,造成错误。

在Linux下,父进程创建子进程需要用到fork()函数

一个进程通过fork()函数,创建一个和自己一样的进程。创建出来的进程子进程,而创建子进程的进程就是父进程

子进程是父进程的一个副本,是它的复制,两者不共享地址空间。

fork()函数最主要的特点是,调用一次,返回两次。

1.当父进程fork()创建子进程失败时,fork()返回-1。

2.当父进程fork()创建子进程成功时,此时,父进程会返回子进程的pid,而子进程返回的是0。所以可以通过返回的pid来控制父子进程后续所要执行的操作。

8300e326df66?utm_campaign=shakespeare

image.png

利用管道让父子进程间进行通信的操作。需要用到:

include

int pipe(int fd[2]); //若成功返回0,失败返回-1

当一个管道创建时,会创建两个文件描述符,fd[0]为数据进入打开,fd[1]为数据写出打开

1.首先利用pipe(fd)创建管道,判定函数的返回值,如果<0则表示创建失败

2.随后创建子进程,并判定fork()的返回值,fork()==0即表示子进程。

3.在子进程的代码块中,fd[0]打开,fd[1]关闭

4.在父进程的代码块中,fd[0]关闭,fd[1]打开。

以上即可实现,数据从父进程流入子进程的操作。

在Linux中,pid指的是运行在内存中的进程的id,而ppid则指的是它父进程的id。

有时候父子进程之间会出现,父进程运行结束了,在内存中销毁了。而子进程还没运行结束,此时,linux会把子进程挂在linux中的init进程下,这是Linux启动时开启的一个进程,是Linux所有进程的祖宗,pid为1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值