第九章-进程关系

终端登录

BSD终端登录

在这里插入图片描述

  1. init以空环境exec getty程序
  2. getty对终端设备调用open函数,以读、写方式将终端打开
  3. 以类似于下列的方式调用login程序在这里插入图片描述在这里插入图片描述

linux 终端登录

和BSD登录类似,主要区别在于说明终端配置的方式。
linux系统,用/etc/init/tty1.conf文件

网络登录

BSD网络登录

  • 以下是执行telnet服务进程时调用的进程序列:
    在这里插入图片描述
  • init执行shell脚本/etc/rc从而启动守护进程inetd,一旦该shell脚本终止,inetd的父进程就变成init。

Linux网络登录

和BSD网络登录类似,但使用扩展的因特网服务守护进程xinetd。

进程组

  • 是一个或多个进程的集合,每个进程组有一个唯一的进程组id.
  • 每个进程组有一个组长进程,组长进程的进程组ID等于其进程ID
  • 进程组的生命期为从进程组创建开始到其中最后一个进程离开为止
#include <unistd.h>
       #include <sys/types.h>
       /*set/get process group*/
       gid_t getegid(void);
       int setpgid(pid_t pid, pid_t pgid);
       pid_t getpgid(pid_t pid);

       pid_t getpgrp(void);                 /* POSIX.1 version */
       pid_t getpgrp(pid_t pid);            /* BSD version */

       int setpgrp(void);                   /* System V version */
       int setpgrp(pid_t pid, pid_t pgid);  /* BSD version */

会话

  • 会话是一个或多个进程组的集合
    在这里插入图片描述
 #include <unistd.h>
 /*creates a session and sets the process group ID
*/
       pid_t setsid(void);
       /* get session ID*/
        pid_t getsid(pid_t pid);

控制终端

  • 进程组、会话和控制终端
    在这里插入图片描述
  • 一个会话可以有一个控制终端
  • 控制进程
  • 一个前台进程组和多个后台进程组

函数tcgetpgrp、tcsetpgrp和tcgetsid

#include <unistd.h>
/*get  terminal foreground process group*/
/*The function tcgetpgrp() returns the process group ID of the  foreground  process  group on the terminal associated to fd, which must be the controlling terminal of the calling process*/
       pid_t tcgetpgrp(int fd);
/*set terminal foreground process group*/
       int tcsetpgrp(int fd, pid_t pgrp);

作业控制

  • 需要一个支持作业控制的shell以用由作业控制提供的功能
  • 有3个特殊字符可使终端驱动程序产生信号,并将他们发送至前台进程组
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值