2021-07-10 看linux笔记随笔

该文章内容并非原创,labuladong文章笔记。仅用于个人学习,侵删。

对于Linux操作系统来说,进程就是一个数据结构,该数据结构就是linux对于一个数据的描述,部分源码:

struct task_struct {
	// 进程状态
	long			  state;
	// 虚拟内存结构体
	struct mm_struct  *mm;
	// 进程号
	pid_t			  pid;
	// 指向父进程的指针
	struct task_struct __rcu  *parent;
	// 子进程列表
	struct list_head		children;
	// 存放文件系统信息的指针
	struct fs_struct		*fs;
	// 一个数组,包含该进程打开的文件指针
	struct files_struct		*files;
};


文件描述符
在进程数据结构中,有一个files数组,该数组包含进程打开的文件指针,一般来说:

  • files[0] :程序读取输入
  • files[1] :程序输出
  • files[2] :程序输出错误

每个进程被创建时,这三个位置被填入默认值,分别是标准输入流、标准输出流、标准错误流,常说的「文件描述符」说的就是该文件指针
在这里插入图片描述
而所谓的重定向就是改变文件指针数组,使其指向其他地方
在这里插入图片描述
管道符就是将一个文件的输出和另一个文件的输入连接起来
在这里插入图片描述


Linux中线程与进程
在linux中线程和进程基本没有区别,linux都是用 task_struct 来描述它们,唯一的区别就是共享数据的区域不同

进程与其子进程中mm结构与files结构不共享
![ ](https://img-blog.csdnimg.cn/20210710093512493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMTc5Njkx,size_16,color_FFFFFF,t_70)

而进程与其子线程中共享同一个内存和files数组
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值