• linux高性能服务器编程第七章Linux服务器程序规范


    • Linux程序服务器 一般以后台进程形式运行. 后台进程又称为守护进程(daemon). 他没有控制终端, 因而不会意外的接收到用户输入. 守护进程的父进程通常都是init进程(PID为1的进程)
    • Linux服务器程序有一套日志系统, 他至少能输出日志到文件. 日志这东西太重要了,排错对比全靠它.
    • Linux服务器程序一般以某个专门的非root身份运行. 比如mysqld有自己的账户mysql.
    • Linux服务器程序一般都有自己的配置文件, 而不是把所有配置都写死在代码里面, 方便后续的更改.
    • Linux服务器程序通常在启动的时候生成一个PID文件并存入/var/run 目录中, 以记录改后台进程的PID.
    • Linux服务器程序通常需要考虑系统资源和限制, 预测自己的承受能力

    日志

    sudo service rsyslog restart // 启动守护进程
    #include <syslog.h>
    // priority参数是所谓的设施值(记录日志信息来源, 默认为LOG_USER)与日志级别的按位或
    // - 0 LOG_EMERG  /* 系统不可用*/
    // - 1 LOG_ALERT   /* 报警需要立即采取行动*/
    // - 2 LOG_CRIT /* 非常严重的情况*/
    // - 3 LOG_ERR  /* 错误*/
    // - 4 LOG_WARNING /* 警告*/
    // - 5 LOG_NOTICE /* 通知*/
    // - 6 LOG_INFO /* 信息*/
    //  -7 LOG_DEBUG /* 调试*/
    void syslog(int priority, const char* message, .....);
    
    // ident 位于日志的时间后 通常为名字
    // logopt 对后续 syslog调用的行为进行配置
    // -  0x01 LOG_PID  /* 在日志信息中包含程序PID*/
    // -  0x02 LOG_CONS /* 如果信息不能记录到日志文件, 则打印到终端*/
    // -  0x04 LOG_ODELAY /* 延迟打开日志功能直到第一次调用syslog*/
    // -  0x08 LOG_NDELAY /* 不延迟打开日志功能*/
    // facility参数可以修改syslog函数中的默认设施值
    void openlog(const char* ident, int logopt, int facility);
    
    // maskpri 一共八位 0000-0000
    // 如果将最后一个0置为1 表示 记录0级别的日志
    // 如果将最后两个0都置为1 表示记录0和1级别的日志
    // 可以通过LOG_MASK() 宏设定 比如LOG_MASK(LOG_CRIT) 表示将倒数第三个0置为1, 表示只记录LOG_CRIT
    // 如果直接设置setlogmask(3); 3的二进制最后两个数均为1 则记录 0和1级别的日志
    int setlogmask(int maskpri);
    
    // 关闭日志功能
    void closelog();

    用户信息, 切换用户

    UID - 真实用户ID EUID - 有效用户ID - 方便资源访问 GID - 真实组ID EGID - 有效组ID

    #include <sys/types.h>
    #include <unistd.h>
    
    uid_t getuid();
    uid_t geteuid();
    gid_t getgid();
    gid_t getegid();
    int setuid(uid_t uid);
    int seteuid(uid_t euid);
    int setgid(gid_t gid);
    int setegid(gid_t gid);

    可以通过 setuidsetgid切换用户 root用户uid和gid均为0

    进程间关系

    PGID - 进程组ID(Linux下每个进程隶属于一个进程组)

    #include <unistd.h> pid_t getpgid(pid_t pid); 成功时返回pid所属的pgid 失败返回-1 int setpgid(pid_t pid, pid_t pgid);

    会话 一些有关联的进程组将形成一个会话 略过

    查看进程关系 ps和less

  • 相关阅读:
    从菜鸟腾飞至专家(我的心得)
    SQL 绕圈算法???
    asp access 时间段
    SQL 绕圈算法2???
    月薪三万的一道面试题
    Java方法参数是引用调用还是值调用?——值调用
    简述一个大型交易网站的发展旅程
    Java分布式应用学习笔记04JDK的并发包的集合总结
    ORACLE 执行计划中cost cardinality bytes cpu_cost io_cost解释
    剖析float型的内存存储和精度丢失问题
  • 原文地址:https://www.cnblogs.com/mjhjl/p/16229147.html
Copyright © 2020-2023  润新知