zoukankan      html  css  js  c++  java
  • Unix环境高级编程—进程关系

    终端登录

    网络登录

    进程组

    getpgrp(void)

    setpgid(pid_t pid, pid_)

     

    会话是一个或多个进程组的集合,通常由shell的管道将几个进程编成一组。

    setsid(void)

    getsid(pid_t pid)

     

    会话建立过程,简述:


         其中,xinetd守护进程在监听到有客户端请求ssh连接后,fork一个子进程xinetd,然后该子进程exec执行sshd程序(也就图中的PPID3944),而父进程xinetd则继续监听网络中其他连接请求的到来。

       sshd程序调用login程序,抛出一个登录shell(图中PID11081),此时该进程权限为root权限,同时,打开文件描述符012,方便用户进行输入用户名密码这两个简单的交互,如果用户名密码准确无误,则fork一个新的进程作为控制终端(pts/0,该进程ID11085),并降低权限,由root权限更改为登录用户名对应的权限。最后,由控制终端fork一个控制进程,来作为与控制终端连接的会话首进程,也就是图中的PID11086的进程,至此,一个完整的会话建立完毕,我们在这个伪终端中执行的任何命令的进程的PPID都应该为11086(如图中ps -ef grep webber的父进程都是11086),因为它们都是在这个会话中完成的,而这个会话首进程的进程组ID11086.

     

    注:一个会话只能有一个前台进程组,其他进程组为后台进程组。在终端键入中断键(Ctrl+C),都会将信号送到前台进程组fg,如果将挂断信号发送到控制进程(会话首进程11086),则pts断开连接。

    保证程序能与控制终端对话的方法是open文件 /dev/tty或 /dev/pts/0 

     

    作业控制:

    终端IO和终端产生的信号总是从前台进程组连接到实际终端。

    后台进程的输出是否出现在终端是可选择的,如果选择让后台进程输出不出现在终端(用 stty 命令),则SIGTTOU会将该进程在后台阻塞。

     

    对于前台、后台作业以及终端驱动程序的作业控制功能如下图:


    Shell执行程序

     

    使用的登录shell不同,则创建各个进程的顺序也可能不同。

     

    ps -o pid,ppid,pgid,tpgid,sid,comm|cat |cat

    对于这条命令,shell环境下,首先创建执行管道中最后一个cat的进程,然后它fork两个进程,分别是倒数第二个cat和第一个ps,然后它们分别执行exec,通过管道完成任务(这里可能产生竞争条件),最终输出到终端。而在Bash环境下Bash将是管道中三个命令的父进程,bash是后台进程,而那三个命令是前台进程。

     

    孤儿进程组:

          这里所说的孤儿进程组其实很好理解,我们可以举一个最简单的例子,在我们通过pts创建一个会话时,在/bin/bash的登录环境下,系统会指定一个会话首进程来作为其他命令进程的父进程,这个会话首进程会做为后台进程组的组长(假设PID=1000),这时,我们可以执行一段代码在前台执行(假设执行程序的进程的PID=2000),在这段代码中fork了一个子进程(假设PID=3000),那么PID20003000的父子进程组成了一个前台进程组,其中,父进程PID=2000的作为前台进程组的组长。那么,当我们先把PID=3000的子进程挂起停止运行后,再杀死PID=2000的父进程或者父进程主动exit,这时,这个只有PID=3000的子进程的前台进程组成为孤儿进程组,被init收养,同时,这个前台进程组变为后台进程组,而会话首进程PID=1000的进程组成为前台进程组。这时内核可以向孤儿进程组发送SIGCONT信号,使孤儿进程组继续执行。

       注意,对于孤儿进程组,如果内核用SIGTTIN信号去停止它,则此进程组就再也不会继续执行,不在接受SIGCONT信号。POSIX.1要求向新孤儿进程组中处于停止状态的每一个进程发送挂掉信号(SIGHUP),接着向其发送继续信号(SIGCONT)

                    

  • 相关阅读:
    【2021-08-09】问题还需一点一点去改正
    【2021-08-08】连岳摘抄
    【2021-08-07】请教帖
    21春助教总结
    实践总结+技术博客评分
    来吧 ,来吧 自己搭建一个erp 系统
    博客索引
    「CCNU21暑期第六次周赛」
    「CCNU21暑期第五次周赛」
    「图论」连通性问题
  • 原文地址:https://www.cnblogs.com/webber1992/p/5850754.html
Copyright © 2011-2022 走看看