• 小知识


    pcb就是task_struct 由slab算法分配在内核内存   1kb   在 0-1GB的内核空间里,所有进程共享同一个内核空间0-1GB因为 进程运行在用户态不会修改内核空间。

    内核空间  环境变量等信息  栈  堆 (多个线程栈会夹在堆中) 未初始化变量段,初始化变量段,代码段。

    ipcs 是一个UINX/Linux 的命令,用于报告系统的消息队列、信号量、共享内存等

    父进程死后,子进程变为孤儿进程,被init进程托养,父pid改为1 

    子进程死后,1-4GB的空间会清掉,但在0-1GB的内核空间的pcb信息还不会清掉,这个时候称为僵尸进程,需要当父进程调用wait()或者waitpid()系统调用取得子进程的终止状态。才会清掉那pcb信息

    如果父进程也死了那就被init进程托养,init进程会周期执行wait清掉僵尸进程

    1 ) exit 和return 的区别。
    ① exit 是一个函数,带有参数, exit 执行完后把控制权交给系统;
    ② re 阳m 是函数执行完后的返回, re阳m 执行完后把控制权交给调用函数。
    2) exit 和abort 的区别。
    ① exit 是正常终止进程;
    ② abort 是异常终止。
    ( 3 )现在我们重点了解exit()和_exit()函数。
    1 ) exit 和exit 函数都是用来终止进程的。

    当程序执行到exit 或_exit 时,系统无条件地停止剩下所有操作,清除包括PCB 在内的各种数据结构,并终止本进程的运行。

    2) exit() 是在头文件stdlib.h 中声明,而_exit()声明在头文件unistd.h 中声明。exit 中的参数exit code 为0 时,代表进程正常终止,若为其他值,表示程序执行过程中有错误发生。并且_exit()执行后立即返回给内核,而exit() 要先执行一些清除操作,然后将控制权交给内核。在调用exit 函数时,其会关闭进程所有的文件描述符,清理内存以及其他一些内核清理函数,但不会刷新流( stdin 、stdout 、stderr· · · )的数据。exit 函数是在exit 函数之上的一个封装, 其会自动调用exit ,并在调用之前先刷新流数据。

    3) exit()函数与一exit()函数最大区别就在于exit()函数在调用exit 系统之前要检查文件的打开情况,把文件缓冲区的内容写回文件。由于Linux 的标准函数库中,有一种被称作“缓冲I/。”的操作, 。其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。每次读文件时, 会连续的读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件的时候也仅仅是写入内存的缓冲区,等满足了一定的条件(如达到了一定数量或遇到特定字符等)后,再将缓冲区中的内容一次性写人文件。这种技术大大增加了文件读写的速度,但也给编程带来了一点儿麻烦。比如有一些数据,理论上应该已经写入了文件,但实际上因为没有满足特定的条件,它们还只是保存在缓冲区内,这时如果用exit()函数直接将进程关闭, 缓冲区的数据就会丢失。因此,要想保证数据的完整性,就一定要使用exit()函数。

    wait()函数会阻塞,直到直到有信号来到或子进程结束

    RTT一次往返时间

    MSL网络数据最大滞留时间

    MSS tcp荷载最大值,在握手阶段告知,如果没说默认536b 取双方较小的mss 为此次通信的mss   一般为MTU-20(ip head)-20(tcp head)

    tcpdump 可以将网络中传送的数据包的“ 头”完全截获下来提供分析 截包

    使用ping 检查连通性有以下6 个步骤。

    ( 1 )使用ipconfig/all 观察本地网络设置是否正确。
    ( 2) ping 127.0.0.l ,来检查本地的TCP/IP 协议有没有设置好,如图8-2 所示。
    ( 3) ping 本机IP 地址,这样是为了检查本机的IP 地址是否设置有误。
    ( 4) ping 本网网关或本网IP 地址,这样的是为了检查硬件设备是否有问题,也可以检
    查本机与本地网络连接是否正常。(在非局域网中这一步骤可以忽略)
    ( 5) ping 本地DNS 地址,这样做是为了检查本地DNS 服务器是否工作正常。
    ( 6) ping 远程IP 地址,这主要是检查本网或本机与外部的连接是否正常。

    nets tat 命令用于显示与IP 、TCP, UDP 和ICMP 协议相关的统计数据, 一般用于检验本
     机各端口的网络连接情况。netstat 是在内核中访问网络及相关信息的程序,它能提供TCP 连
      接、对TCP 和UDP 的监听及获取进程内存管理的相关报告。

    lsof ( list open file ) 是一个列出当前系统打开文件的工具。在Li nux 环境下,任何事物都
    以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以
    如传输控制协议( TCP )和用户数据报协议( UDP )套接字等,系统在后台都为该应用程序分
    配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统
    之间的交互提供了通用接口。因为应用程序打开文件的描述符列表提供了大量关于这个应用
    程序本身的信息,因此通过l sof 工具能够查看这个列表对系统监测以及排错将是很有帮助的。

    1) COMMAND :进程的名称。
    2) PID :进程标识符。
    3) USER :进程所有者。
    4) FD :文件描述符,应用程序通过文件描述符识别该文件如cwd 、txt 等。
    5) TYPE :文件类型,如DIR 、阻G 等。

    6) DEVICE :指定磁盘的名称。
    7 ) SIZE :文件的大小。
    8 ) NODE :索引节点(文件在磁盘上的标识) 。
    9) NAME :打开文件的确切名称。

    弹幕查敏感词    一个字符串查包含的词  单个就kmp,多个词就自动机

    share_ptr 引用计数是线程安全的,但其他操作得不到保证

    孤儿sockct,其原本的进程已经结束了,但为了维护状态等待fin ack之类的东西还被内核维护着。

    子进程死后会给父进程发个SIGCHLD 这个信号默认是忽略。如果父进程不管且死后,子进程将被init进程托管,此时子进程会向init进程再次发送SIGCHLD信号。init周期性会清理掉僵尸进程。

    	int sad = 5;
    00007FF70DEC5C1F  mov         dword ptr [sad],5  //把5赋值给[sad]
    	cout << &sad;
    00007FF70DEC5C26  lea         rdx,[sad]  //取出[sad]的地址
    00007FF70DEC5C2A  mov         rcx,qword ptr [__imp_std::cout (07FF70DEE0158h)]  
    00007FF70DEC5C31  call        qword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (07FF70DEE0208h)]  
    	cout<<9;
    00007FF70DEC5C37  mov         edx,9  //直接把9弄进寄存器
    00007FF70DEC5C3C  mov         rcx,qword ptr [__imp_std::cout (07FF70DEE0158h)]  
    00007FF70DEC5C43  call        qword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (07FF70DEE0150h)]  
    	int &&sd = 5;
    00007FF70DEC5C49  mov         dword ptr [rbp+44h],5  //把5弄到栈上存起来
    00007FF70DEC5C50  lea         rax,[rbp+44h]  //取出5在栈上的地址给rax
    00007FF70DEC5C54  mov         qword ptr [sd],rax  //把rax赋值给[sd]
    右值引用
    原本那个值(5)是要去寄存器的(函数返回值也是放在寄存器)然后会被刷新掉
    但是右值引用把这个值从寄存器拿了回来,放在栈上??用右值引用变量指着

      

    int sad = 5;00007FF70DEC5C1F  mov         dword ptr [sad],5  cout << &sad;00007FF70DEC5C26  lea         rdx,[sad]  00007FF70DEC5C2A  mov         rcx,qword ptr [__imp_std::cout (07FF70DEE0158h)]  00007FF70DEC5C31  call        qword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (07FF70DEE0208h)]  cout<<9;00007FF70DEC5C37  mov         edx,9  00007FF70DEC5C3C  mov         rcx,qword ptr [__imp_std::cout (07FF70DEE0158h)]  00007FF70DEC5C43  call        qword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (07FF70DEE0150h)]  int &&sd = 5;00007FF70DEC5C49  mov         dword ptr [rbp+44h],5  00007FF70DEC5C50  lea         rax,[rbp+44h]  00007FF70DEC5C54  mov         qword ptr [sd],rax  

  • 相关阅读:
    Thread
    投资
    DBLink
    sql
    列转行
    DataTable,DataView,DataRowView,DefaultView与DataSet
    Vue.js 基础学习之组件
    Vue.js 基础学习计算属性computed
    v-model的修饰符和使用
    Vue.js 基础学习 v-on 指令
  • 原文地址:https://www.cnblogs.com/l2017/p/10623768.html
Copyright © 2020-2023  润新知