第九章-进程关系

进程关系

  • 终端登录
    • BSD终端登录
    • linux 终端登录
  • 网络登录
    • BSD网络登录
    • Linux网络登录
  • 进程组
  • 会话
  • 控制终端
  • 函数tcgetpgrp、tcsetpgrp和tcgetsid
  • 作业控制

终端登录

BSD终端登录

第九章-进程关系_第1张图片

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

linux 终端登录

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

网络登录

BSD网络登录

  • 以下是执行telnet服务进程时调用的进程序列:
    第九章-进程关系_第3张图片
  • init执行shell脚本/etc/rc从而启动守护进程inetd,一旦该shell脚本终止,inetd的父进程就变成init。

Linux网络登录

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

进程组

  • 是一个或多个进程的集合,每个进程组有一个唯一的进程组id.
  • 每个进程组有一个组长进程,组长进程的进程组ID等于其进程ID
  • 进程组的生命期为从进程组创建开始到其中最后一个进程离开为止
#include 
       #include 
       /*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 */

会话

  • 会话是一个或多个进程组的集合
    第九章-进程关系_第4张图片
 #include 
 /*creates a session and sets the process group ID
*/
       pid_t setsid(void);
       /* get session ID*/
        pid_t getsid(pid_t pid);

控制终端

  • 进程组、会话和控制终端
    第九章-进程关系_第5张图片
  • 一个会话可以有一个控制终端
  • 控制进程
  • 一个前台进程组和多个后台进程组

函数tcgetpgrp、tcsetpgrp和tcgetsid

#include 
/*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个特殊字符可使终端驱动程序产生信号,并将他们发送至前台进程组
    在这里插入图片描述

你可能感兴趣的:(unix环境高级编程,Linux内核,嵌入式)