装修之家,青岛官网seo价格,wordpress笑话类模板,如何做网站个人引入地址空间
静态变量和栈空间变量 静态变量默认是被初始化的 存放在初始化和为初始化空间中 static已经变成了全局变量 命令行参数和环境变量的增长方向 这里观察的是命令行参数和环境变量的地址 观察命令行和环境变量表的地址
进程地址空间 如果他们是同一块儿空间为什么打印的结果却不一样呢,我们知道肯定是父进程先跑完在子进程进程输出的时候a应该是1才对——我们看到的只是虚拟地址空间 1.子进程是父进程的拷贝父子进程代码和数据是共享的只有在数据进行改变时才进行写时拷贝子进程继承父进程的pcb里的大部分内容地址空间页表并且继承的时候每个页表对应的权限默认为只读的状态他们通过页表进行映射到物理内存物理内存由操作系统进行管理 2.因为进程之间是独立的他们本来对应的是相同的物理内存但是当有一方进行改变的时候就需要将发生改变的那一方进行拷贝写时拷贝更改页表的指向指向新的物理空间 页表是有权限的
对数据的权限限制有rwrw一般默认为r 字符串存在常量区权限是只读的操作系统检测到要修改变量就会产生报错 加const是为了增强代码的安全性错误早发现早处理 在父进程数据拷贝给子进程的时候会将页表权限rw-r因为子进程是父进程的拷贝页表也会单独有一份父进程和子进程的页表都会发生改变当其中有一方进行修改数据但是检测到页表对应的数据是只读的此时os将介入重新开辟空间将原来的数据拷贝过来再进行修改完成后权限就会到了rw(缺页中断) 进程终止
进程退出状态 1代码执行完结果正确 2代码执行完结果错误 3代码没执行完进程异常 只有代码执行完的退出结果才是有意义的 主函数退出——退出码 进程终止会有一个返回值return——表示退出情况0表示成功非0表示失败发生错误 使用echo $?观察最后一次退出情况 第一次139表示出错 第二三次0表示正常退出 因为这个命令记录的是最后一次的退出情况我们明白命令也是一种程序echo是正常运行的所以返回0 其他函数退出——错误码 调用库函数错误码错误码保存在errno 调用自己的函数普通函数的返回值一般表示的是函数的结果特殊情况下错误码需要自己设置 通过errno的方式观察库函数的错误码 进程异常 本质收到异常信号 每种信号都是一个宏每个信号都是不一样的 exit _exit exit是库函数 _exit是系统调用 exit中的参数表示返回的退出码 _exit不会刷新缓冲区 exit会刷新缓冲区 证明缓冲区不是在系统中的 进程等待 wait 等待任意一个进程 父进程等不到就卡死 我们能看到父进程一直在等待子进程一直在运行 waitpid
等待特定的pid exit的参数是1可是为什么status返回的是256呢 status存的信息是错误码信号 父进程和子进程fork之后谁先运行取决于调度器