7.1 日志
Linux系统日志
- Linux提供一个守护进程syslogd来处理系统日志, 不过现在都用的都是升级版rsyslogd
1 2 3
| #include<syslog.h> void syslog(int priority, const char* message, ...); void openlog(const char* ident, int logopt, int facility);
|
- rsyslogd既能接收用户进程输出的日志, 又能接收内核日志. syslog函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中, rsyslogd则监听该文件以获取用户进程的输出.
7.2 用户信息
- UID 真实用户ID: 程序的执行用户
- EUID 有效用户ID: 程序访问资源时的用户权限
- GID 真实组ID
- EGID 有效组ID
7.3 进程间关系
进程组
Linux下每个程序都隶属于一个程序组, 因此除了PID信息, 还有进程组ID - PGID; 每个进程组都有一个首领进程, 其PGID和PID相同.
1 2 3
| #include<unistd.h> pid_t getpgid(pid_t pid); int setpgid(pid_t pid, pid_t pgid);
|
会话
一些有关联的进程组将形成一个会话(session)
setsid不仅创建新会话, 还有如下效果
7.4 系统资源限制
1 2 3
| #include<sys/resource.h> int getrlimit(int resource, struct rlimit* rlim); int setrlimit(int resource, const struct rlimit* rlim);
|
7.5 改变工作目录和根目录
1 2 3 4
| #include<unistd.h> char* getcwd(char* buf, size_t size); int chdir(const char* path); int chroot(const char* path);
|
7.6 服务器程序后台化
1
| int daemon(int nochdir, int noclose);
|
- nochdir参数用于指定是否改变工作目录,如果给它传递0,则工作目录将被设置为“/”(根目录),否则继续使用当前工作目录.
- noclose参数为0时,标准输入、标准输出和标准错误输出都被重定向到/dev/null文件,否则依然使用原来的设备