【Linux】终端/进程组/会话/守护进程

本文详细介绍了Linux系统中的终端、进程组、会话和守护进程。从终端的启动流程到进程组的操作,再到会话的创建和setsid函数的使用,最后阐述了守护进程的概念及其创建模型,包括如何使用setsid实现会话独立,以及如何通过chdir、umask等函数确保守护进程的正常运行。
摘要由CSDN通过智能技术生成

一、终端

       1、什么是终端?

                    在 Linux 系统中,用户通过终端登录到系统后得到一个 shell 进程,这个终端成为 shell 进程的控制终端,进程中,控制终端是保存在 PCB 中的信息,而 fork 会复制 

PCB 中的信息,因此右 shell 进程启动的其他进程的控制终端也是这个终端。在默认情况下(没有重定向),每个进程的标准输入、标准输出和标准错误输出到显示器上。

                     Alt + Ctrl + F1、F2、F3、F4、F5、F6               字符终端                        pts               指伪终端

                     Alt + F7          图形终端

                     SSH、Telnet 网络终端

        2、终端的启动流程

               一个 Linux 系统启动如下步骤:

               init ------> fork ---------->exec --------->gettty --------> 用户输入账号 ------------>login ---------->exec --------->bash

        3、ttyname 函数

             

         #include <unistd.h>

                char *ttyname(int fd);

                返回值:

                             成功返回终端名;           失败:返回NULL,设置 errno

二、进程组

       1、概念

             进程组,也称为作业。

        2、特性

              当父进程,创建子进程的时候,默认子进程与父进程属于同一组进程。进程组 ID 等于 第一个进程 ID(组长进程)。所以,组长进程标识:其进程组 ID == 其进程 ID

              可以使用  kill - SIGKILL + 进程组 ID(负的)  来将整个进程组内的进程全部杀死。

              组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。

              进程组生存期:进程组创建到最后一个进程离开(终止或转移另一个进程组)

              一个进程可以为自己或子进程设置进程组 ID

        3、进程组操作函数

                

           #include <unistd.h>
  
                pid_t getpgrp(void);                 /* POSIX.1 version */

                    获取当前进程的进程组 ID 。

        

           #include <unistd.h>
              pid_t getpgid(pid_t pid);
          
            获取指定进程的进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值