ear主要还是补充了 Linux
中的一些基本知识
Linux
日志系统,Linux
中通过守护进程syslogd
来管理日志,对于kernel
,内核日志首先利用printk
等函数把信息打印到内核的环形缓冲区中,之后环形缓冲区中的内容直接映射到/proc/kmsg
文件中,对于用户态,使用函数syslog
首先把日志打印到/dev/log
文件中,之后由syslogd
守护进程把文件同步到/var/log/*
文件中,Linux
的系统日志系统如下: 相关函数比如syslog
和openlog
函数- 用户信息:
UID
,EUID
,GID
,EGID
, 一个进程拥有两个用户ID
:UID
和EUID
其中EUID
的作用就是: 使得运行程序的用户用于有效用户的权限,比如su
程序的EUID
就是root
, 所以su
程序的用户可以使用有效用户root
的权限,可以通过一些类的getXXX,setXXX
函数来获取到进程的各种用户信息 - 进程组:
Linux
下每一个进程都属于一个进程组,一个进程组中的组长进程的PID
和进程组PGID
相等 - 会话: 一些有关联的进程组形成一个会话,可以利用
setsid
创建一个会话
#include<unistd.h>
pid_t setsid( void );
利用这一个函数创建新的会话的同时会产生如下效果:
- 调用进程会成为会话的首领,并且是最新会话中的唯一一个成员
- 新建一个进程组并且成为进程组的首领
- 调用进程将脱离终端
- 改变工作目录可以使用
chdir
方法,改变根目录可以使用chroot
方法(但是没有改变工作目录) - 服务器进程后台化(掌握后台化的方法): 步骤如下:
- 首先设置文件掩码,使得进程创建新的文件的时候文件的权限为
model & 0777
- 创建新的会话并且设置本进程为进程组的组长
- 关闭标准输入设备,标准输出设备和标准错误设备
- 关闭其他已经打开的文件描述并且蒋标准输入,标准输出和标准错误都重定向到
/dev/null
文件中即可,直接使用open
函数即可,此时就可以直接占用空出来的运算符 daemon.c