unix进程学习笔记

系统调用为内核和用户空间架设了桥梁

所有代码在进程中运行

进程有标识pid 父进程ppid

万物皆为文件

文件描述符只存在打开的进程中 它代表已经打开的资源 关闭后可由其他进程使用 并且坚持最小原则 内核角度意义重大 因为被关闭他就不与硬件曾层打交道了,内核无需对其进行跟踪


文件操作的核心是文件描述符

内核为进程施加了某些资源限制

进程皆有资源限制分为软限制和硬限制

进程皆有环境,所有进程都从其父进程处继承环境变量。他们由父进程设置并被子进程所继承。每一个进程都有环境变量,对于特定进程甚至是全局性的

系统调用不能直接操作环境变量但是c库函数setenv 、getenv却可以完成这样的工作


所有进程都可以访问名为ARGV的特殊数组, arguement vector 参数向量或数组

它保存了在命令行中传递给当前进程的参数。常用于将文件名传入程序还有解析命令行输入

两种进程自身层面上的机制可以用来互通信息。一个是进程名称,一个是退出码。(日志文件属于文件系统层面网络打开套接字依靠网络来实现)

进程名称可以在其运行期间被修改并作为一种通信手段,所有进程在推出的时候都带有数字推出码用于指明进程是否顺利结束(0-255) 0 表示顺利结束,其他表明出现了错误。

进程皆可以衍生(forking )衍生的子进程从父进程继承了所有的文件描述符,也获得了父进程所有的文件描述符的编号。这样,两个进程就可以共享套接字、文件等等。

衍生的进程几乎可以瞬间返回并且衍生速度很快因此 一个进程将500M的东西装入内存 衍生出来的就会有500m的副本 然后都可以使用各自这500m的内存空间 这是节省内存的给力办法哦几乎完美。比分别载入三个应用程序实例快的多。

衍生的进程可能会分配到多个cpu核心中, 注意可能也可能不是并行操作。


结束父进程后子进程会成为孤儿进程 系统不会对其作出任何改动。

 现在的系统 衍生的进程和父进程
使用(copy on write)写时复制,他们是在共享在内存中的数据只有某一个修改的时候才进行内存复制,其他时候相当于适当隔离。 节省资源



信号: 信号是一种异步通信,由内核发出给进程 进程都可以获得信号 ,内核其实是中介 实质是 进程->内核->进程 的过程 信号会指示进程作出结束或者忽略之类的动作


进程皆可互通

管道是单项数据流 一个进程一端,也可以和子进程共享 ,套接字对是双向的 他们都是对进程间通信的有益抽象,多被作为通信通道

在同一个进程组的会被同一信号控制

会话组是进程组的集和。也可以一个命令全部终止。










你可能感兴趣的:(unix进程学习笔记)