Linux服务器程序规范

头歌 DNS协议分析第3关----DNS 报文分析 DNS 报文分析 阅读详情

除了网络通信外,服务器程序还必须考虑许多其他细节问题,零碎,但基本上时模板式的。 ———引

  • Linux服务器程序一般以后台形式运行。后台程序又称守护进程。它没有控制终端,因而也不会意外接受用户输入。守护进程的父进程一般是init进程(pid=1)。
  • Linux服务器程序通常有一套日志系统,它至少能输出日志到文件,有的高级服务器可以输出日志到专门的UDP服务器。大部分后台进程都在/var/log下有自己的日志目录。
  • Linux服务器程序一般以某个专门的非root身份运行。mysqld, httpd, syslogd等后台进程,并分别有自己的运行账户mysql, apache, syslog。‘
  • Linux服务器通常时可配置的。服务器程序通常处理很多命令选项,如果一次运行的选项太多,则克拉一用配置文件来管理。绝大多数服务器程序都有配置文件并存放在/etc下
  • Linux服务器程序通常在启动时生成一个PID文件并存入/var/run目录中,以记录该后台进程的PID。
  • Linux服务器程序通常需要考虑系统资源和限制,以预测自身能承受多大负荷,比如进程可用文件描述符总数和内存总量等。

1.日志

1.Linux系统日志:

  • Linux提供一个守护进程来处理系统日志–syslogd, 升级版–rsyslogd。
  • rsyslogd守护进程可以接收用户进程输出日志,可以接受内核日志。
  • 用户进程时通过调用syslog函数生成系统日志的。
  • 该函数将日志输出到一个unix本地域socket类型(AF_UNIX)的文件/dev/log中,rsyslogd则监听该文件以获取用户进程的输出。
  • 内核日志在以前的系统上时通过另一个守护进程rklogd来管理的,rsyslogd利用额外的模块实现了相同的功能。内核日志由printk等换树打印至内核环状缓存中。环状缓存的内容直接映射到/proc/kmsg。
  • rsyslogd通过读取该文件获得内核日志,默认调试信息保存在/var/log/debug,普通信息保存至/var/log/messages,内核信息:/var/log/kern.log。配置文件:/etc/rsyslog.conf,主要设置内核日志输入路径,是否接受UDP日志,及其监听端口(默认514 /etc/services)是否接受TCP日志及其监听端口,日志文件权限,包含哪些配置文件。
    这里写图片描述

2.syslog()

应用程序使用syslog()与守护进程rsyslogd通信。

#include<syslog.h>
void syslog( int priotity, const char * message, ***);

该函数采用可变参数(第二个参数message和第三个参数。。。)来结构化输出。
priority:设施值 (按位异或) 日志级别。设施值默认:LOG_USER,下面针对默认设施值,讨论日志级别。

#include<syslog.h>

#define LOG_EMERG   0   //系统不可用
#define LOG_ALERT   1   //报警,需要立刻采取动作
#define LOG_CRIT    2   //非常严重的情况
#define LOG_ERR     3   //错误
#define LOG_WARNING 4   //警告
#define LOG_NOTICE  5   //通知
#define LOG_INFO    6   //信息
#define LOG_DEBUG   7   //调试

1.下面这个函数可以改变syslog的默认输出方式,进一步结构化日志内容

#include<syslog.h>
void openlog(const char * ident, int logopt, int facility);

(1)ident:指定字符串将被添加到日志消息的日期和时间之后,通常设为程序的名字。
(2)logopt:对后续syslog调用的行为进行配置,它可取下列值的按位异或

#define LOG_PID     0x01    //日志消息包含PID
#define LOG_CONS    0x02    //如果消息不能记录到日志文件,则打印到终端
#define LOG_ODELAY  0x03    //延迟打开日志功能直到第一次调用syslog
#define LOG_NDELAY  0x04    //不延迟

(3)facility: 用来修改ysyslog默认设施值

此外,日志过滤也很重要,程序再开发阶段可能需要输出很多调试信息,而发布之后,我们又要将这些调试信息关闭,解决这个问题的方法并不是再程序发布之后,删除调试代码(日后可能还会用到),而是缉拿但地设置日志掩码,使日志级别大于日志掩码的日志被系统忽略。

2.下面这个函数用于设置syslog的日志掩码。

#include<syslog.h>
int setlogmark( int maskpri );

maskpri:指定日志掩码值,该函数始终回成功,它返回调用进程先前的日志掩码值。

3.关闭日志功能:

#include<syslog.h>
void closelog();

2.用户信息

1.UID, EUID, GID, EGID

用户信息对于服务器安全很重要,大多说服务器以root启动, 非root运行

TablesAreget & set
UID真实用户IDgetuid() / setuid(uid_t uid)
EUID有效用户IDgeteuid() / setuid(uid_t uid)
GID真实组IDgetgid() / setuid(gid_t gid)
EGID有效组IDgetgeid() / setuid(gid_t gid)

基础知识:

一个进程拥有两个用户ID, UID, EUID, EUID存在的目的是为了方便资源的访问, 它使得运行程序的用户拥有该程序的有效用户权限,比如,su用来更改账户信息,但修改账户时su程序的所有者是root,在普通用户运行su程序时,其有效用户就是该程序的所有者root, 有效用户为root的进程称为特权进程,EGID与EUID类似,下面演示uid, euid区别:

#include<stdio.h>
#include<unistd.h>

int main()
{
    uid_t uid = getuid();
    uid_t euid = geteuid();
    printf("uid is %d ,  euid is %d \n", uid, euid);
    return 0;
}

将生成的可执行文件,所有者设置为root,并设置该文件set-user-id标志,然后运行。

从测试输出结果看,进程的uid是启动程序的用户id, 而euid是root。

2.切换用户

static bool switch_to_user(uid_t user_id, gid_t gp_id)
{
    if((user_id == 0) && (gp_id == 0))
        return false;

    gid_t gid = getgid();
    uid_t uid = getuid();
    if( ( (gid != 0) || (uid!= 0)) && (( gid != gp_id) || ( uid != user_id )) )
        return false;

    if(uid != 0) 
        return false;
    if((setgid(gp_id) < 0) || setuid(user_id) < 0))
        return false;

    return true;

}

3.进程间关系

1.进程组:

linux下每一个进程都属于一个进程组,因此他们除了pid之外,还有进程组ID(PGID)。我们用如下函数获取指定进程组PGID.

#include<unistd.h>
pid_d getpgid(pid_t pid);

成功返回pid, 失败-1,设置errno。
如果pid与pgid相同,则由pid指定的进程别设置为进程组首领:如果pid为0, 表示当前进程的PGID为pgid;如果pgid为0, 则使用pid作为目标pgid。setpid函数成功时返回0, 失败-1, 设置errno。
一个进程只能设置自己或者其子进程的PGID。并且, 当子进程调用exec系列函数后,我们也不能再在父进程中对他设置PGID。

2.会话

(1)一些有关联的进程将组成一个会话, 下面的函数用于创建一个会话:

#include<unistd.h>
pid_t setsid(void);

该函数不能由进程组的首领进程调用,否则将产生一个错误。对于非首领的进程, 调用该函数不仅创建新会话, 而且有如下额外效果。
调用进程成为会话的首领,此时该进程时新会话的唯一成员。
新建一个进程组,其PGID就是调用进程的PID, 调用进程成为该组的首领。
调用进程将甩开终端(如果有)

该函数成功时返回新的进程组PGID, 失败-1, errno。
Linux进程并未提供所谓会话ID的概念, 但Linux系统认为它等于会话首领所在的进程组的PGID,
(2)并提供了如下函数读取SID

#include<unistd.h>
pid_t getsid(pid_t pid);

3.用ps命令查看进程关系

执行ps命令可查看进程,进程组和会话之间的关系。

这里写图片描述
这里写图片描述

在bash_shell 下执行ps和less命令,所以ps和less命令的父进程时bash命令,这个可以从PPID(父进程PID)一列看出。
这三条命令创建了一个会话(SID是2962)和两个进程组(PGID:2962, 3102)bash命令的PID,PGID和SID都相同,显然它时会话的首领, 也就是组2962的首领。ps时3102的首领,
这里写图片描述

4.系统资源限制

Linux上运行的程序都会受到资源限制的影响,比如物理设备限制(cpu数量,内存数量等),系统策略限制(cup时间等),以及具体实现的限制(文件名最大长度)Linux系统资源限制可以通过如下一对函数来读取和设置:
getrlimit , setrlimit

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

rlimit 结构体定义如下:

struct rlimit
{
    rlim_t rlim_cur;
    rlim_t rlim_max;
};

成功返回0, 失败-1, 置errno

rlim_t 是一个整数类型,它描述资源级别

rlim_cur 成员指定资源的软限制,建议性的,最好不要超越的限制,如果超越,系统可能向进程发送信号,并终止运行,如果当前进程CPU时间超过软限制,系统将向进程发送SIGXCPU信号;当文件尺寸超过其软限制时,系统将向进程发送SIZEXFSZ信号。

rlim_max 成员指定资源的硬限制。硬限制一般是软限制的上限,普通程序可以减小应限制,而只有以root身份运行的程序才能增加硬限制,此外我们可以使用ulimit命令修改当前shell环境下的资源限制(软/硬)这种修改对该shell启动的所有后续程序都有效,我们也可以通过修改配置文件来改变系统软限制和应限制,而这种修改时永久的。

resource参数指定资源限制类型。如下表

资源限制类型含义
RLIMIT_AS进程虚拟内存(单位字节)超过该限制将使得某些函数(mmap)产生ENOMEN错误
RLIMIT_CORE进程核心转储文件(core dump)的大小限制(单位字节)其值为0表示不产生核心转储文件
RLIMIT_CPU进程CPU时间限制(单位秒)
RLIMIT_DATA进程数据段(data, bss, 堆)限制(单位字节)
RLIMIT_FSIZE文件大小限制(单位字节)超过该限制将是的某函数(write)产生EFBIG错误
RLIMIT_NOFILE文件描述符数量限制,超过该限制将是的某些函数(比如pipe)产生MEFILE错误
RLIMIT_NPROC用户能创建的进程数限制,超过该限制使得某些函数(比如fork)产生EAGIN错误
RLIMIT_STACK进程栈内存限制(单位字节)超过该限制将引起SIGSEGV信号

5.改变工作目录和根目录

有些服务器程序好需要改变工作目录和根目录(web /var/www)
获取当前进程工作目录和改变进程的工作目录的函数:

#include<unistd.h>
char * getcwd(char * buf, size_t size);
int chdir(const char * path);

buf参数指向的内存用于存储当前工作目录的绝对路径,size指定其大小
如果当前目录的绝对路径超度(+1 (‘\0’))超过了size,则getcwd返回NULL,errno:ERANG。

chdir中path指向要切换到的目录。成功0, 失败-1 置errno。

改变进程根目录:chroot

#include<unistd.h>
int chroot(const char * path);

chroot并不改变进程的当前工作目录,调用chroot之后,仍需要调用chdir(“/”)来将工作转至新的工作目录,之后原来的文件描述符依然生效。所以可以利用早先打开的文件描述符来访问调用chroot之后不能直接访问的文件(目录).

6.服务器程序后台化

最后,如何在代码中让一个进程以守护进程的防止运行,守护进程的编写遵循一定的步骤,下面一个实例。

bool daemonize()
{
    pid_t pid = fork();//创建子进程
    if(pid < 0)
    {
        return false;
    }
    else if( pid > 0 )
    {
        exit(0); //父进程退出
    }

    pit_t sid = setsid();
    if(sid < 0)
    {
        return false;
    }

    if(chdir("/") < 0) //更改进程工作目录为根
    {
        return false;
    }
//重定向输出输出,错误输出
    close(STDIN_FILENO); 
    close(STDOUT_FILENO);
    close(STDERR_FILENO);

    open("/dev/null", O_RDONLY);
    open("/dev/null", O_RDWR);
    open("/dev/null", O_RDWR);
    return true
}

实际上,linux提供了完成同样功能的库函数:

#include<unistd.h>
int deamon(int nochdir, int noclose);

nochdir:传0则工作目录将被设置为”/”,否则继续使用当前工作目录。
noclose:传0标准输入输出,标准错误输出都被重定向到,dev/null,否则继续使用原来的设备,成功0, 失败-1 置error。

最后 ,暑假开始了!Let’s play!

一文理解近红外光谱数据建模步骤的细节(细节知识总结) 上一篇文章,向入门的同志大体介绍了近红外光谱数据建模的内容,依据上文其实已经可以基本完成数据建模的工作,但是很多工作不够细致,本文便是分享其中的一些技术细节。 阅读详情

相关推荐

Edge主页被2345劫持?手动清理注册表与组策略的完整方案

浏览器主页劫持是Windows系统中常见的恶意篡改行为,其原理是通过修改注册表、快捷方式、组策略等多处系统配置,强制锁定浏览器启动页。这类劫持不仅影响上网体验,还可能带来隐私泄露和恶意软件感染风险。在安全防护与系统优化场景中,掌握手动清理主页劫持的技能至关重要。本文针对Edge主页被2345导航劫持的问题,深入解析劫持入口,提供从快捷方式、注册表到组策略的逐层清理步骤,并给出防复发策略,帮助用户彻底摆脱顽固劫持。

weixin_30582943的博客 385

linux内核中的struct rlimit结构体详解

在linux内核中,对一个进程获取系统资源的数量进行了限制。那么linux内核是如何实现这种对一个进程的各种资源的限制呢? linux使用struct rlimit结构体来实现的,rlimit是 resource limit的缩写。 struct rlimit { unsigned int rlim_cur; /* ...

weixin_33756418的博客 1072

阿里云大模型ACP认证模拟考试(二)

摘要:在阿里云大模型高级工程师 ACP 认证暂无真题题库的现状下,模拟题具有重要意义。其依照真实考试设计,涵盖题型、题量与分值分布,助力考生熟悉考试框架,合理分配答题时间精力,提升效率。同时,模拟题紧扣官方课程,能帮助考生精准定位知识盲点,如大模型架构原理和通义千问应用实践等重点内容,以便针对性完善知识体系。此外,通过练习模拟题,考生可掌握不同题型的解题思维与技巧,快速洞察复杂题目本质,提高答题准确率。

davidkorhenn的博客 2077

struct rlimit介绍

因本人在工作中涉及到此问题特别查阅资料转载了这篇文章,作为参考资料,感谢原作者! 1、rlimit介绍 在Linux系统中,Resouce limit指在一个进程的执行过程中,它所能得到的资源的限制,比如进程的core file的最大值,虚拟内存的最大值等。   Resouce limit的大小可以直接影响进程的执行状况。其有两个最重要的概念:soft li

USBdrivers的专栏 1250

GitHub工业级开源利器:StreamPipes如何简化工业物联网数据分析

Apache StreamPipes是一款GitHub上的工业级开源利器,旨在简化工业物联网数据分析。它通过图形化界面连接各类工业协议数据源,以拖拽方式构建流处理管道,并实现实时可视化,有效降低了数据分析的技术门槛,让业务人员也能自助完成从数据接入到洞察的全流程。

weixin_29279153的博客 186

疫情数据分析的“核武器”!JHU CSSE COVID-19数据集超深度解析与实战指南(附代码)

在面对这场没有硝烟的战争时,除了医护人员在前线与病毒搏斗,还有一群默默的英雄——数据科学家和分析师,他们利用手中的“数据武器”,昼夜不停地监测、分析、预测疫情走势,为政府决策、资源调配、公众科普提供了至关重要的支撑。同时,由于某些国家(如美国、加拿大、澳大利亚、中国等)的数据细化到省/州级别,为了得到国家层面的总数据,我们需要按国家和日期进行聚合。正是在这样的背景下,经过这些步骤,我们已经得到了一个包含了累计数据、每日新增数据和活跃病例数的完整数据集,可以开始进行深入的分析和可视化了!

wylee的博客 1165

[使用技巧] Linux创建自定义服务

Linux创建并部署自定义服务

weixin_52157994的博客 3996

Python爬虫教程:如何爬取多平台电商商品信息(价格、评价、库存)

本文介绍了如何编写一个跨平台电商商品爬虫,爬取多个平台的商品信息,包括商品名称、价格、评价等数据。通过Python的爬虫库(如requestsSelenium)和数据处理库(如pandasmatplotlib)的结合,我们可以高效地获取和分析电商平台上的商品信息。

2201_76125261的博客 917

编写一个最简单的Linux服务端和客户端程序

2023年8月3日,周四下午。

m0_61629312的博客 601

Cadence OrCAD Capture原理图中为功能模块分配ROOM的方法

本文详解介绍原理图设计阶段为原理图模块分配ROOM的方法。

fydar的博客 1346

基于STM32L4XX、HAL库的MP2672GD-0000-Z充电芯片驱动程序设计

CHG_STAT_GPIO_Port, CHG_STAT_Pin, // 这些宏应由 CubeMX 生成在 main.h。

zhusl6688的博客 497

4. Linux服务:如何写一个Linux服务

Linux服务是一组常驻内存运行,为有权限的使用者提供及时数据或功能的后台程序。通常所说的服务是由systemd service启动的,因此服务进程是systemd进程fork()出的子进程,通过systemd.exec配置子进程环境,再调用ExecStart指定的服务启动命令,启动服务进程,然后systemd监控这个进程,直到它退出。要让linux运行一个自定义服务,通常需要三步:1.写服务要实现的基本功能,通常是一个脚本或执行命令(可执行程序);

weixin_42098934的博客 1771

OmniParser V2 和 OmniTool 让 AI 来控制 Windows 设备

OmniParser V2 和 OmniTool 是由微软开发的一套工具,通过屏幕解析技术让 AI 能够理解和控制 Windows 设备。OmniParser V2 是一款数据解析工具,可以解读屏幕内容,并将内容传递给大模型OmniTool 则是一个运行 Windows Agent 的工具,提供 Windows 界面给 AI 操作。

简简单单Onlinezuozuo 2732

6. Linux服务器程序规范

UID:标识用户身份,决定用户本身的所有权限。EUID:用于实际判断用户的权限,可能与 UID 不同。GID:标识用户所属的组,决定用户组的权限。EGID:用于实际判断用户的组权限,可能与 GID 不同。在权限管理中,UID 和 GID 决定了用户和组的基本身份和权限,而 EUID 和 EGID 决定了用户在特定情境下(如执行带有setuid或setgid标志的程序时)所拥有的实际权限。这些标识符是 UNIX 权限模型的重要组成部分,用于确保系统资源的安全访问和管理。

Teriri_的博客 1373

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Linux 网络编程学习笔记——七、Linux 服务器程序规范

除了网络通信外,服务器程序通常还必须考虑许多其他细节问题。这些细节问题涉及面广且零碎,而且基本上是模板式的,所以称之为服务器程序规范。

BeZer0的学习笔记 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

第7章 Linux服务器程序规范

Linux高性能服务器编程笔记

weixin_44192953的博客 205

(七)linux服务器程序规范

七 linux服务器程序规范 7.1 日志 linux提供了一个守护进程来处理系统日志–syslogd,不过现在的linux系统使用的都是他的升级版rsyslogd。 rsyslogd守护进程既能接收用户进程输出的日志,又能接收内核的日志。 用户进程通过syslog函数生成系统日志。syslog函数将日志输出到一个UNIX本地域socket类型的文件/dev/log中。rsyslogd则监听该文件来获取用户进程的输出。 内核日志由printk等函数打印至内核的环装缓存中,环装缓存中的内容直接映射到/proc

qq_41825194的博客 374

【Linux Server】七、Linux服务器程序规范

七、Linux服务器程序规范 1.大部分后台进程都在/var/log目录下拥有自己的日志目录。 2.绝大多数服务器程序都有配置文件,并存放在/etc目录下。 3.Linux服务器进程通常会在启动的时候生成一个PID文件并存入/var/run目录中,以记录该后台进程的PID。 4.大部分服务器必须以root身份启动但不能以root身份运行。 5.Linux提供一个守护进程来处理系统日志——syslogd,现在使用的已经是它的升级版——rsyslogd。 rsyslogd守护进程既能接收用户进程输出的日志,又能

江湖人称菠萝包 346

技术演进中的开发沉思-105 Linux服务编程系列:服务器程序规范

本文深入剖析Linux服务器规范的7大核心要点,通过技术细节与生活场景的类比,呈现服务器运维的实战经验。从日志管理(系统日志分类、syslog函数使用)、用户权限控制(UID/EUID切换规范),到进程关系管理(进程组/会话原理)、资源配额设置(软硬限制调整),再到目录隔离(chroot安全沙箱)和守护进程创建(6步标准化流程),每个环节都配有具体代码示例和故障排查案例。作者结合多年运维经验强调:服务器规范不是抽象概念,而是确保系统稳定安全运行的具体操作指南,遵循这些规范能有效避免权限失控、资源泄漏、进程异

你的天空阅读专栏 1246

Linux 高性能服务器编程——Linux服务器程序规范

问题聚焦:    除了网络通信外,服务器程序通常还必须考虑许多其他细节问题,这些细节问题涉及面逛且零碎,而且基本上是模板式的,所以称之为服务器程序规范。    工欲善其事,必先利其器,这篇主要来探讨服务器程序的一些主要规范。概览:Linux服务器程序一般以后台程序的形式运行,后台进程又称为守护进程。Linux服务器程序一般以某个专门的非root身份运行。Linux服务器程序通常是可配置的,命令行或

ctthuangcheng 2408

规范:Linux服务器程序规范

除了网络通信外,服务器程序还必须考虑许多其他细节问题,零碎,但基本上都是模板式的。———引言Linux服务器程序一般以后台形式运行。后台程序又称守护进程。它没有控制终端,因而也不会意外接受用户输入。守护进程的父进程一般是init进程(pid=1)。Linux服务器程序通常有一套日志系统,它至少能输出日志到文件,有的高级服务器可以输出日志到专门的UDP服务器。大部分后台进程都在/var/log下有自己的日志目录。Linux服务器程序一般以某个专门的非root身份运行。

为无为,事无事,味无味。 791

《Linux高性能服务器编程》学习总结(七)——Linux服务器程序规范

第七章 Linux服务器程序规范   服务器程序除了需要网络通信外,还应该考虑很多其他的细节,而这些细节很多很杂,但又基本是模板式的。1)服务器程序基本都是以后台形式运行的,没有控制终端,不能接受用户输入,其父进程通常是init。2)服务器程序有一套日志系统。3)服务器程序以某个专门的非root身份运行。4)服务器通常是可配置的。5)服务器进程启动时通常会生成一个PID文件以...

a5615024的博客 129

Linux 服务器程序规范、服务器日志、用户、进程间的关系

文章目录服务器程序规范日志rsyslogd 守护进程 服务器程序规范 Linux 服务器程序一般以后台进程(守护进程[daemon])形式运行。它没有控制终端,因此不会意外接受到用户输入,守护进程的父进程通常是 init 进程(PID为1)。 服务器的调试和维护都需要一个专业的日志系统,Linux 常用一个守护进程 rsyslogd(syslogd的升级版) 来处理系统日志。 Linux 服务器程序一般以 非root 的身份运行。如:mysqld、httpd、syslogd 等后台进程分别拥有自己的运行

Jormungand_V的博客 717

Linux高性能服务器编程 | 读书笔记 | 5. Linux服务器程序规范

UID:标识用户身份,决定用户本身的所有权限。EUID:用于实际判断用户的权限,可能与 UID 不同。GID:标识用户所属的组,决定用户组的权限。EGID:用于实际判断用户的组权限,可能与 GID 不同。在权限管理中,UID 和 GID 决定了用户和组的基本身份和权限,而 EUID 和 EGID 决定了用户在特定情境下(如执行带有setuid或setgid标志的程序时)所拥有的实际权限。这些标识符是 UNIX 权限模型的重要组成部分,用于确保系统资源的安全访问和管理。

m0_74795952的博客 1148

【Linux网络编程】服务器程序规范

总结《Linux高性能服务器编程》第七章,Linux服务器程序规范

weixin_42659457的博客 658

linux高性能服务器编程 (七) --Linux服务器程序规范

第七章 LInux 服务器程序规范   1)linux服务器程序一般以后台进程形式运行。后台进程又称为守护进程,是没有控制终端的,所以不会受到外界的干扰。守护进程的父进程通常是init进程(PID为1的进程)。2)linux服务器程序有一套日志系统,大部分后台进程都会在/var/log目录下记录。3)linux服务器程序一般都会以某个专门的非root身份运行,分别拥有自己的运行账户。4)linu...

weixin_30446613的博客 128
上一篇: 随机搜索算法之遗传算法简介
下一篇: 高性能服务器程序框架
Tony L.Du
博客等级 码龄11年 73粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值