ear主要还是补充了 Linux 中的一些基本知识

  1. Linux日志系统, Linux中通过守护进程 syslogd 来管理日志,对于 kernel,内核日志首先利用 printk等函数把信息打印到内核的环形缓冲区中,之后环形缓冲区中的内容直接映射到 /proc/kmsg 文件中,对于用户态,使用函数 syslog 首先把日志打印到 /dev/log 文件中,之后由 syslogd守护进程把文件同步到 /var/log/* 文件中, Linux的系统日志系统如下: Pasted image 20241207144045.png 相关函数比如 syslogopenlog 函数
  2. 用户信息: UID , EUID , GID , EGID , 一个进程拥有两个用户 ID: UIDEUID 其中 EUID 的作用就是: 使得运行程序的用户用于有效用户的权限,比如 su 程序的 EUID 就是 root , 所以 su 程序的用户可以使用有效用户 root 的权限,可以通过一些类的 getXXX,setXXX函数来获取到进程的各种用户信息
  3. 进程组: Linux下每一个进程都属于一个进程组,一个进程组中的组长进程的 PID 和进程组 PGID 相等
  4. 会话: 一些有关联的进程组形成一个会话,可以利用 setsid 创建一个会话
#include<unistd.h>
pid_t setsid( void );

利用这一个函数创建新的会话的同时会产生如下效果:

  • 调用进程会成为会话的首领,并且是最新会话中的唯一一个成员
  • 新建一个进程组并且成为进程组的首领
  • 调用进程将脱离终端
  1. 改变工作目录可以使用 chdir 方法,改变根目录可以使用 chroot 方法(但是没有改变工作目录)
  2. 服务器进程后台化(掌握后台化的方法): 步骤如下:
  3. 首先设置文件掩码,使得进程创建新的文件的时候文件的权限为 model & 0777
  4. 创建新的会话并且设置本进程为进程组的组长
  5. 关闭标准输入设备,标准输出设备和标准错误设备
  6. 关闭其他已经打开的文件描述并且蒋标准输入,标准输出和标准错误都重定向到 /dev/null文件中即可,直接使用 open 函数即可,此时就可以直接占用空出来的运算符 daemon.c