系统编程-进程

Linux中的系统编程-进程

6.7 环境列表

每一个进程都会有一组关于“名称-值”的字符串数组,这个数组称之为环境列表。其中的“名字”称之为环境变量。

子进程可以一次性的继承父进程的环境列表,子进程在被父进程创建之后复制了父进程的环境列表之后,子进程的进程列表就是独立的了。子进程创建后,父、子进程均可更改各自的环境变量,且这些变更对对方而言不再可见。

通过 Linux 专有的 /proc/PID/environ 文件检查任一进程的环境列表,每一个“NAME=value” 对都以空字节终止。

进程标识符

首先进程标识符的特点:

  1. 唯一性:每个进程都有一个唯一的进程标识符。
  2. 可重用性:虽然进程标识符是唯一的,但是它可以被回收并分配给新的进程。

特殊的进程标识符:

  1. 0:表示调度进程,它负责调度其他进程。
  2. 1:表示“ini”进程,它是所有进程的祖先。并且其是一个用户态进程,但是使用管理员的权限运行。同时也是系统中所有孤儿进程的再生父亲。

关于函数 fork()

这个函数失败的原因一般有两种:

  1. 超过了系统可以拥有的最大进程数限制。
  2. 超过了用户可以创建的最大进程数限制。

fork() 函数主要两种用法:

  1. 父进程和子进程执行不同的代码段,这种就是父进程调用 fork,使得子进程去处理请求,而父进程则继续等待下一个服务请求。
  2. 一个进程要执行一个不同的程序,一般都是 fork+exec 的方式。

关于函数 vfork()

这个函数已经被 SUSV4 完全删除,在 SUSV3 中也被标记为弃用,所以对于可移植的程序来说,不应该再使用它。

vfork() 函数的特点:

  1. 和 fork 不同的是,这个函数明确标识子进程优先执行(而 fork 没有这样的要求),在子进程调用 exec 或者 exit 之后父进程会恢复运行。所以如果在运行 exec exit 之前有依赖于父进程的操作则会导致死锁
  2. 这个函数其实就是 fork+exec
  3. 这个函数在父进程的内存空间中执行,在它使用 exec exit 之前

系统编程-进程
https://ysc2.github.io/ysc2.github.io/2024/07/21/Linux中的系统编程-进程/
作者
Ysc
发布于
2024年7月21日
许可协议