Linux系统编程(4)
前言
这算是我自己的一个Linux系统编程学习路上的一个学习笔记,学习的过程中看过一些视频+博客,所以在学习过后根据记录的笔记来完成代码实现的过程中,可能会出现一大段文章内容和别人写的一样或者某些思想也会相同,如有侵权,请联系删除或者添加引用。(本文章不会作为商业用途)
一、会话
会话: 多个进程组的集合
创建会话的6点注意:
1.调用进程不能是进程组组长,该进程变成新会话首进程。
2.该进程成为一个新进程组的组长进程。
3.需要有root权限(ubuntu不需要)。
4.新会话丢弃原来的终端,该会话没有控制终端(无法与用户交互)。
5.该进程是组长进程,则出现错误并返回。===>第 1 条
6.建立新会话时,先调用fork(),接着终止父进程,最后子进程调用setsid()。
pid_t getsid(pid_t pid);
//获取进程所属的会话ID
pid_t setsid(void);
//创建一个会话,并且把调用者的ID设置成进程组ID,同时也是新会话的ID。
//自己既是新的会长,也是新的组长。
二、守护进程
守护进程: 也常称为精灵进程(Daemon)。它时Linux中的后台服务进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件(简称:无终端)。一般采用以d结尾的名字。
创建守护进程,最关键的一步是调用setsid()函数创建一个新的session(会话),并让该进程成为session leader。其创建步骤为:
1.创建子进程,退出父进程。所有工作在子进程中进行形式上脱离控制终端。
2.在子进程中创建会话。使子进程完全独立出来,脱离控制。
3.改变当前的工作目录为根目录,chdir()函数。防止占用可卸载的文件系统,也可以换成其他路径,不一定是根目录。
4.重设文件权限掩码,umask()函数。防止继承的文件创建屏蔽字拒绝某些权限。增加守护进程的灵活性。
5.关闭文件描述符或者重定向文件描述符。集成的打开文件不会用到,浪费系统资源,无法卸载。
6.守护进程业务逻辑:while(1) …
(B站黑马程序员上课笔记)