进程控制

Posted followyou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程控制相关的知识,希望对你有一定的参考价值。

进程控制

进程是系统环境的一个基本组成部分,是系统资源的基本单位,UNIX系统中完成的工作几乎通过进程来控制。

进程创建

进程有一个唯一标识PID(正整数)与之关联,创建进程就会获得其PID。

系统创建时就存在的几个特殊进程:

  • PID为0,swapper调度进程;
  • PID为1,init进程,在系统自举过程末尾由内核创建的;
  • PID为2,pagedaemon,负责支持虚拟系统的分页。

特殊的进程在0~n之间,普通用户的进程在 n+1 - MAXPID-1之间,用户PID通常比较大。

getpid()获取PID:

技术分享图片

getppid()获取调用进程的父进程。

应用程序创建进程的唯一方法是在执行进程中fork新进程。
技术分享图片

fork函数创建新进程,与当前进程构成父子关系。

若fork调用成功,则同时存在父进程和子进程且二者均从fork返回,但具有不同的返回值:子进程的返回值为0,而父进程返回的是子进程的PID。
fork返回的子进程的PID给父进程的原因:一个进程可以有多个子进程,因而无法通过函数获取到进程的子进程ID。fork返回0给子进程的原因因为每个子进程仅有一个父进程,子进程通过getppid()而获得父进程ID。

若调用失败,fork返回-1,并置errno指出失败原因(如EAGAIN没有足够资源用来创建进程或已经有太多进程在运行)。

当fork成功,父子进程均从fork之后一条语句继续执行,子进程几乎是父进程的复制。
1)共同特征

  • 实际用户ID
  • 有效用户ID
  • 会晤ID
  • 控制终端
  • 当前工作目录
  • 根目录
  • 文件方式创建屏蔽
  • 环境变量
  • 所有相连的共享存储段
  • 资源限制
  • 任何打开的文件描述字的执行时关闭标志FD_CLOEXEC

2)不同点

  • 子进程有自己的唯一进程ID
  • 子进程拥有其父进程打开的文件描述字副本,此副本属于子进程本身,随后父进程改变其文件描述字属性不会影响到子进程,反过来也是一样。
  • 子进程不继承父进程设置的文件锁
  • 子进程不继承父进程设置的定时器
  • 父进程的任何悬挂信号在进程中都被清除,但子进程从父进程继承他的信号屏蔽和信号动作。
  • 子进程已耗费的紧凑时间tms_utime、time_stime、tms_cutime和tms_cstime均置为0

以上是关于进程控制的主要内容,如果未能解决你的问题,请参考以下文章

进程控制

什么是进程,什么是进程控制块(PCB)?

操作系统中的进程控制

进程控制

进程控制---PCB(进程控制块)

进程控制器常见的一些进程都有哪些