第七章 Linux服务器程序规范

Huan Lee Lv5

Untitled

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); // 修改syslog的默认输出方式

Untitled

  • rsyslogd既能接收用户进程输出的日志, 又能接收内核日志. syslog函数将日志输出到一个UNIX本地域socket类型(AF_UNIX)的文件/dev/log中, rsyslogd则监听该文件以获取用户进程的输出.

Untitled

7.2 用户信息

  • UID 真实用户ID: 程序的执行用户
  • EUID 有效用户ID: 程序访问资源时的用户权限
  • GID 真实组ID
  • EGID 有效组ID

Untitled

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)

1
pid_t setsid(void); 

setsid不仅创建新会话, 还有如下效果

Untitled

7.4 系统资源限制

1
2
3
#include<sys/resource.h>
int getrlimit(int resource, struct rlimit* rlim);
int setrlimit(int resource, const struct rlimit* rlim);

Untitled

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文件,否则依然使用原来的设备
  • Title: 第七章 Linux服务器程序规范
  • Author: Huan Lee
  • Created at : 2023-08-20 08:08:07
  • Updated at : 2024-02-26 04:53:15
  • Link: https://www.mirthfullee.com/2023/08/20/notion-第七章 Linux服务器程序规范-4e5cab6a/
  • License: This work is licensed under CC BY-NC-SA 4.0.