Linux进阶知识1.0

@bit::Shadow
✧(≖ ◡ ≖✿

目录

分号;不论上一个指令执行是否成功均会执行下一个指令

逻辑与符号&&只有当上一个命令执行成功才会执行下一个指令

子进程继承父进程的信号处理动作?像忽略信号动作?

子进程继承父进程的信号处理

守护进程

[设备文件 /dev/null](#设备文件 /dev/null)

[ss -tan | head-n1; ss-tan | grep 8080](#ss -tan | head-n1; ss-tan | grep 8080)

二、Recv-Q(接收队列)

三、Send-Q(发送队列)

[字段 peer Addres:对端地址](#字段 peer Addres:对端地址)

右值=

Switch的错误用法


分号;不论上一个指令执行是否成功均会执行下一个指令

逻辑与符号&&只有当上一个命令执行成功才会执行下一个指令

子进程继承父进程的信号处理动作?像忽略信号动作?

子进程继承父进程的信号处理

是的,子进程会继承父进程的信号处理动作,包括忽略(SIG_IGN)、自定义处理函数和默认行为。这是一个非常重要的特性。

守护进程

cpp 复制代码
/*守护进程译作:daemon (dei men)*/
const char *workpath = "/";
void Daemon (int cdir, int noclose)
{
    //解决IO问题
    signal (SIGCHLD, SIG_IGN);
    signal (SIGPIPE, SIG_IGN);

    if (fork () > 0)
        exit (0);
    //子进程创建作为新会话组组长
    pid_t ret = setsid ();
    if(ret < 0)
        RETFATAL ("setsid");

    //工作路径是否切换?(即守护进程运行的路径)
    if(cdir == 0)
        chdir (workpath);
    // 重定向标准输入、标准输出、标准错误到my.log文件(日志文件)
    // 这样做的要求是守护进程特征(默认关闭终端)
    if(noclose == 0)
    {
        int fd = open ("/my.log", O_RDWR);//读写
        if(fd < 0)
            RETFATAL ("open");
        int ret1 = dup2 (fd, 0);
        int ret2 = dup2 (fd, 1);
        int ret3 = dup2 (fd, 2);
        if(ret1 < 0 || ret2 < 0 || ret3 < 0)
            RETFATAL ("dup2");
        
        //打开的fd需要关闭吗?--->关闭后会影响写入吗?不会!!!
        int ret4 = close (fd);
        if(ret4 < 0)
            RETFATAL ("close");
    }
}

设备文件 /dev/null

凡是写入到这个文件内的内容,均被丢弃。

凡是从该文件读取的内容,均是空。

ss -tan | head-n1; ss-tan | grep 8080

"带表头地"列出当前所有和 8080 有关的 TCP 连接。

第三行四行是因为"本地回环"的原因形成了一对链接。

二、Recv-Q(接收队列)

当前这个 socket 的接收缓冲区里,还有多少字节没被应用层读走。

状态 含义
LISTEN 已完成三次握手、但还没被 accept 取走的连接数(backlog 队列里堆积的量)
ESTAB 已收到但应用还没 recv 的数据字节数

你的输出:

  • LISTEN 的 Recv-Q = 0 → 没有积压的未 accept 连接,accept 很及时

  • 所有 ESTAB 的 Recv-Q = 0 → 没有未读数据,应用读得很干净

如果 LISTEN 的 Recv-Q 持续 > 0,说明 accept 太慢或没调用,连接在排队。


三、Send-Q(发送队列)

状态 含义
LISTEN listen() 传入的 backlog 值(内核可能截断)
ESTAB 已发给对方但还没收到 ACK 的字节数

你的输出:

  • LISTEN 的 Send-Q = 4 → 你 listen() 时 backlog 传的是 4(很小,通常传 SOMAXCONN 即 128 或更大)

  • 所有 ESTAB 的 Send-Q = 0 → 发出去的数据都被确认了,没有待确认

注意:LISTEN 状态下 Send-Q 不是"待发送数据",而是 backlog。 这是很多人误解的地方。

字段 peer Addres:对端地址

右值=

右值在=右侧是"拷贝进行"的,不是"右值在右"所以没问题

Switch的错误用法

cpp 复制代码
const int rnum = epoll_wait (_epollfd, _ep, epoll_arr_maxsize, timeout);

switch (rnum)
{
case (bool)(rnum > 0):
    /* code */
    break;

default:
    break;
}

case后必须是"编译期整型常量表达式"。

  • (bool)(rnum > 0)运行时计算的值,不是常量。
相关推荐
>Andre<3 小时前
UFS5.0标准中文全译·卷一:范围、术语与架构
android·linux·嵌入式硬件
用户0510122572963 小时前
Linux下有关QT显示环境变量设置
linux·嵌入式
闲云自留地3 小时前
告别命令恐惧症,openEuler 基础操作 + 文本 + 网络管理实战
linux·运维·云计算
剑指offer.3 小时前
ARM裸机开发-点亮LED灯
linux·服务器·嵌入式硬件
GeW3 小时前
工作忙.基础弱,也能快速拿RHCE?这套方法亲测有效
linux
Wang's Blog3 小时前
Java 接入Redis: 使用Jedis操作Redis
java·服务器·redis
Ivanqhz4 小时前
数据搬运是性能关键
java·服务器·网络·人工智能·深度学习
其实防守也摸鱼4 小时前
常见安全架构中 Shiro 的认证确认机制解析
运维·服务器·数据库·windows·github
Julien20044 小时前
自动挂载网络附加存储
linux·服务器·网络