美文网首页
进程控制一

进程控制一

作者: suntwo | 来源:发表于2019-07-13 21:54 被阅读0次

进程标识

每个进程都有一个非负的整数表示一个进程的id,这个id是唯一的,来标识一个进程,但是id是可重用的,当一个进程结束后,另外一个进程便可以使用这个id。
通常情况下,id为0的进程是调度进程也被称为系统进程,id为1的是init进程,这个进程读取系统初始化文件。
除了进程id,每个进程还有其他的id。

#include<unistd.h>
pid_t getpid(void)    得到一个进程的id
pid_t getppid(void)   得到一个进程的父进程的id
pid_t getuid(void)     得到一个进程的实际用户id
pid_t geteuid(void)    得到一个进程的有效用户id
pid_
t getgid(void)     得到一个进程的实际组id
pid_t getegid(void)    得到一个进程的有效组id

函数fork

#include<unistd.h>
pid_t fork(void)

函数介绍:
这个函数用来创建一个进程,这个函数使用一次返回两次,一个表示父进程返回子进程的id,一个返回0表示子进程,子进程是父进程的副本,但是子进程和父进程共享正文段(代码段)。
父进程和子进程共享打开的文件表,因此当两者对文件进行读写操作时是相互影响的,因为两者共享文件偏移量。
除了打开的文件外父进程的其他很多属性都由子进程来继承。

  • 实际用户ID,实际组ID,有效用户ID,有效组ID
  • 附属组ID
  • 进程组ID
  • 会话ID
  • 控制终端
  • 设置用户ID和设置组ID标志
  • 当前工作目录
  • 根目录
  • 文件模式创建屏蔽字
  • 信号屏蔽和安排
  • 环境
  • 连接的共享存储段
  • 存储映像
  • 资源限制
    父进程和子进程的区别
  • fork的返回值不同
  • 进程ID不同
  • 这两个进程的父亲ID不同
  • 子进程不继承父进程的文件锁
  • 子进程的未处理的闹钟被清除
  • 子进程的未处理信号集设置为空集

exit函数

有五种正常终止的推出方法

  • 在main函数中调用return函数,等效于exit函数
  • 调用exit函数,处理各种终止处理程序,关闭标准文件I/O
  • 调用_exit和_Exit函数,为进程提供一种无需处理种植处理程序和信号处理程序的终止方法
  • 进程的最后一个线程在其启动例程上调用return,其返回的状态为0
  • 进程的最后一线程调用pthread_exit函数,进程的终止状态为0
    三种异常终止的方式
  • 调用abort
  • 当进程接收到某种信号时,信号的产生可以由自身或者其他进程或者内核产生
  • 最后一个线程对取消做出响应

不管进程如何终止,在终止时都会调用同一段代码,目的是关闭所有的文件描述符和释放它所使用的存储器等资源。

一个子进程的终止,其父进程需要对其善后,否则被称为僵尸进程,父进程可以调用wait或者waitpid函数来接收子进程的终止状态等信息并对其善后,当一个子进程终止时其终止的状态会被暂时保存,等待父进程获取其终止状态,还有一种情况是父进程比子进程先终止,这时子进程的便会将自己的父进程设置为init进程,其工作原理是当一个进程终止时,系统便会检查所有的进程是否是即将终止进程的子进程,如果是便将这个进程的父进程ID设置为1。当一个init的子进程终止时,init进程便会自动调用wait函数来对其善后处理,防止其成为僵尸进程。

wait和waitpid函数

#include<sys/wait.h>
pid_t wait(int *statloc)
pid_t waitpid(pid_t pid,int *statloc,int options)

这个函数的作用便是等待进程的返回,并且获取进程的终止状态,如果statloc为NULL,这不获取进程的退出状态,wait函数表示当任意子进程结束时便返回,在没有子进程结束时阻塞。waitpid表示等待指定id的子进程返回。
有四个宏可以得到子进程的终止原因

  • WIFEXITED(status)为真表示正常终止
  • WIFSIGNALED(status)为真表示异常终止
  • WIFSTOPPED(status)为真表示暂停子进程
  • WIFCONTINUED(status)为暂停作业后又继续作业返回时未真

下面介绍waitpid中的pid参数

  • pid==-1表示等待任意进程和wait功能一样
  • pid>0表示等待pid的子进程结束
  • pid==0表示等待组id等于调用组id的任意进程
  • pid<-1表示等待pid的绝对值的子进程

相关文章

  • 第二章 进程的描述与控制2

    2.2进程控制与同步 一、进程控制 1、进程控制的基本过程: 1)进程的创建 2)进程的终止 3)进程的阻塞与唤醒...

  • 进程控制块PCB

    进程控制块 每一个进程内核中都有一个进程控制块(PCB)来维护进程相关的信息,linux内核的进程控制块时 tas...

  • 操作系统第二章第二部分

    2.2进程控制 进程控制的基本过程: ¡进程的创建 ¡进程的终止 ¡进程的阻塞与唤醒 ¡进程的挂起和激活 1.进程...

  • 二.进程(2)进程控制

    2.2 进程控制 进程控制的基本过程: 进程的创建 进程的终止 进程的阻塞与唤醒 进程的挂起和激活 关于进程的亲属...

  • APUE第9章 进程关系、进程组、会话

    9 进程关系 在第8章学习了进程的控制原语,通过各种进程原语可以对进程进行控制,包括新建进程、执行新程序、终止进程...

  • 进程管理

    进程 进程由程序、数据、进程控制块(PCB)组成。而进程控制块其实本质就是个数据结构,用来记录进程信息的。 进程的...

  • 5.进程控制

    进程控制 这一节主要介绍Unix系统的进程控制,包括创建新进程、执行进程和进程终止。由于前面Linux学习部分有了...

  • 进程控制(一)

    2016-02-02 进程控制 进程标识 每个进程都有一个非负整型的唯一的进程id,因为进程id表示服总是唯一的,...

  • 进程控制一

    进程标识 每个进程都有一个非负的整数表示一个进程的id,这个id是唯一的,来标识一个进程,但是id是可重用的,当一...

  • PHP 扩展知识

    pcntl扩展:(进程控制) pcntl扩展是进程控制的重要扩展,但目前Win不支持。包含进程创建、进程监控、...

网友评论

      本文标题:进程控制一

      本文链接:https://www.haomeiwen.com/subject/xelpkctx.html