linux 进程操作相关的函数讲解

  1. 获取进程的相关标识符信息函数
    在这里插入图片描述

  2. fork函数
    在这里插入图片描述
    可以考虑几个问题:
    子进程是否copy了父进程的所有内存等信息,没有的话是如何实现的
    子进程和父进程的文件操作是怎么实现同步的,父子进程会文件共享,包括偏移量。如果不关闭文件操作符会发生什么
    在这里插入图片描述
    子进程和父进程有哪些是一样的,哪些是不一样的,考虑一下,利于理解

  3. vfork函数,该函数和fork函数一样都会产生新的子进程,那么提出该函数的意义在哪,提高效率,vfork是为专门的场景服务的。vfork保证了子进程先运行。子进程在父进程的地址空间中运行

  4. wait函数,等待进程正常或者异常结束,其包括下面几个函数,需要了解各个函数的作用:
    在这里插入图片描述

  5. exit函数,使得子进程或父进程终止,有5种正常终止状态,3种异常终止状态
    僵死进程:一个已经终止,但是其父进程尚未对其进行善后处理(获取终止子进程的相关信息,释放其所占用的资源)的进程叫做僵死进程。ps将僵死进程的状态打印为Z,如何获取状态?调用wait等函数,也提供了避免僵死进程的方法。init进程的子进程终止时不会出现僵死进程。

  6. 竞争条件:当子进程和父进程中的程序需要按照顺序执行时,就出现了竞争条件。此时需要使用机制去告知对应的进程,此时在进程中可以使用信号机制去传递信号
    在这里插入图片描述
    (插入)有下列方式取消缓冲
    在这里插入图片描述

  7. exec函数,下面有七种不同的exec函数可供调用
    在这里插入图片描述

  8. 进程更改用户id和组id
    某些情况下,需要提高权限或者降低权限,可以使用setuid或者setgid等函数的方法来更改id

  9. 进程会计
    当一个进程结束之后内核会写一个会计记录,包括进程id,组id,内存、cpu信息等。使用acct函数禁止或者使用该进程会计,可以在/var/accout/pacct中读得这些信息。

  10. 用户标志
    使用getlogin()函数可以得到用户登录终端的时候使用的用户名(守护进程获取不到)。

  11. 进程调度
    使用nice,getpriority,setpriority等函数可以获得,设置进程的优先级,优先级越高的进程分配的资源比例越高。

二:
进程关系
12. 终端登录
需要了解BSD的登录流程
13. 网络登录

14. 进程组
每一个进程属于一个进程组,
pid_t getpgrp(void)得到该进程进程组
pid_t getpgid(pid_t pid)得到对应进程id对应的进程组

进程组id等于其进程组长的id
进程可以更改进入的进程组
int setpgid(pid_t pid, pid_t pid)将指定的进程转入指定的进程组,一个进程只能为它自己或它的子进程设置进程组ID

15 会话(session)
会话是一个或多个进程组的集合。
pid_t setsid(void)该函数不能由进程组中的首进程调用,该函数常用于创建守护进程中,创建一个会话。

  1. 控制终端
    一个会话可以有一个终端,可以是终端设备,也可以是伪终端(网络登录),建立与终端连接的首进程称为控制进程,如果有控制终端则必有前台进程。
    有三个函数通知内核,一个进程组哪些是前台进程组。

  2. 作业控制
    作业控制要求有三种形式的支撑

    1. 支持作业控制的shell
    2. 内核中的控制驱动程序必须支持作业控制
    3. 内核必须提供对某些作业控制信号的支撑。
  3. 孤儿进程组

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值