当前位置: 首页 > news >正文

网站logo大全搜索网站开发背景

网站logo大全,搜索网站开发背景,亚马逊跨境电商能赚钱吗,深圳全网营销公司有哪些目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$? 3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前#xff0c;我们学过linux中的非常重要的函数——…目录 一、进程创建 1.写时拷贝 2.创建多个进程 二、进程终止 1.main函数的返回值 2.bash中的$?  3.自定义退出码 4.C语言的错误码 5.错误码与退出码的区别 6.代码异常终止 7.exit函数 8.总结 一、进程创建 在之前我们学过linux中的非常重要的函数——fork。他可以从已存在进程中创建一个新进程新进程为子进程而原进程为父进程。 1.写时拷贝 我们知道fork之后父子代码共享经常会出现同一个变量父子通过操作的不同这个变量的值也不同这个时候就会发生写时拷贝。写时拷贝是如何进行的呢 通过这张图可以看到fork之后数据段变成了只读 子进程需要对数据进行写入就得需要写时拷贝写时拷贝需要重新申请空间进行拷贝再修改页表这都是操作系统在帮我们处理的那么操作系统怎么知道你这一份数据需要进行写时拷贝呢 父进程创建子进程的时候首先将自己的读写权限修改成只读然后再创建子进程这些操作用户并不知道可能对某些数据进行写入这样在页表处就会进行权限判断发现用户没有权限操作系统此时就会介入操作系统会判断用户的操作 如果该区域本该是可读可写的是操作系统修改为只读的因此操作系统会认为用户的操作不算错误就会触发重新申请内存再拷贝内容的策略机制这就是写时拷贝。 如果出错就直接报错不做额外处理。 写时拷贝完成后再将对应的内容在页表中修改为可读可写没有进行写实拷贝的内容依然是只读的。这样用户就可以正常访问了。 这是一种惰性分离每次发生写时拷贝都要开辟空间将写时拷贝的时间越往后延迟操作系统就有更多的资源。 这里还有一个小问题你要写入的时候写就完事了为何还要拷贝一份呢 因为覆盖和修改是不一样的很多情况我们只是想要修改内容的某一部分这样先拷贝再修改会更合适一点。 2.创建多个进程 我们知道fork的常规用法如下两种 一个父进程希望复制自己使父子进程同时执行不同的代码段。例如父进程等待客户端请求生成子 进程来处理请求。一个进程要执行一个不同的程序。例如子进程从fork返回后调用exec函数。 如果要创建多个进程来帮我们处理应该怎么做呢  直接上代码 #includestdio.h #includeunistd.h #includestdlib.h#define N 10typedef void (*callback)();void Work() {int cnt 10;while(cnt){printf(我是一个子进程, pid: %d, ppid :%d, cnt:%d\n,getpid(),getppid(),cnt--);sleep(1);} }void CreateProcess(int n,callback cb) {int i 0;for(;in;i){sleep(1);pid_t id fork();if(id 0){//child printf(子进程创建成功: %d\n,i);cb();exit(0);}} }int main() {CreateProcess(N,Work);sleep(100);return 0; } 这代码对于学过fork的我们来讲并不算难多了一个函数指针而已下面是运行代码。 二、进程终止 进程退出的场景如下三种 代码运行完毕结果正确代码运行完毕结果不正确代码异常终止 1.main函数的返回值 我们写C语言程序时main函数一般都会return 0。只要执行到了return语句证明我们的代码肯定是运行完毕了的只是结果还不知道是否正确。 在多进程环境中我们创建子进程的目的是完成父进程不方便办的事那我们怎么知道子进程办得怎么样虽然我们可以打印出来看看结果但在有一些情况下不方便或者不能打印出来看看此时就可以通过return的值来查看的main函数的返回值就叫做进程的退出码0通常表示成功非0表示失败。父进程可以通过获取子进程退出码即main函数的返回值来得知子进程做得咋样。 成功的还好知道你吧事情办得很好如果返回非0代表这个事没办好我们得知道是因为什么原因失败的我们可以用不同的数字表示不同的原因。但纯数字能表示出错的原因但是不便于人阅读因此有一个函数交 strerror 函数。 如下可以打印出strerror各个数字代表的出错原因 有很多很多原因  2.bash中的$?  在bash命令中输入echo $? 可以打印出最近一个子进程执行完毕时的退出码有点类似于之前我们学习的环境变量变量名为加了$可以打印出变量里的内容。 如下代码中return 10执行该进程bash最后获取到的子进程退出码就为10 但是我们继续执行echo $? 后面退出码就会变成0因为echo也是bash的一个子进程执行echo语句后echo语句就是最后一个子进程了echo又是正常退出的因此再输入echo $? 得到的值为0。 main函数的退出码是可以被父进程获取的用来判断子进程的运行结果  3.自定义退出码 退出码可以使用C语言内置的也可以自定义自己对退出码做解释因为退出码退出多少也就是return 返回多少是你自己设置的  如下就是自定义的退出码如果你的代码根据用户的操作出现了错误可以返回响应的值来知道发生了什么错误。 4.C语言的错误码 在学习C语言的时候我们接触过一个名叫 errno 的全局变量他会在程序在运行过程中调用某些库函数或者系统接口出错的时候被自动设置。也是记录最后一次出错的信息。 如下代码只读的方式打开一个不存在文件我们看一下erron的变化与出错信息 发现错误码为2错误信息为没有该文件 5.错误码与退出码的区别 错误码通常是衡量调用库函数或者系统调用接口的调用情况。系统调用也能更改错误码是因为Linux是用C语言写的提供了C式接口退出码通常是一个进程退出的时候他的退出结果。 他们两个共同的地方在于当失败的时候用来衡量函数、进程出错时的详细原因。 如下让错误码与退出码保持了一致 6.代码异常终止 前面五点主要学习的是进程正常退出的问题可能会有出错码和退出码如果一个进程异常终止那么他的退出码也就没有了意义。 比如代码中存在 /0 错误又比如段错误栈溢出等等程序就会崩溃进程就异常了就不会继续运行了本质是操作系统将该进程杀掉了操作系统会用信号的方式将进程杀掉。 输入 kill -l 可以查看 kill命令的信号  这里我们一直运行一个进程然后输入kill -8 进程pid就可以通过浮点数错误的方式终止该进程。输入其他方式杀死也会有相应的错误报告。  因此查看进程是否出现异常我们只需看有没有收到信号即可。 7.exit函数 C语言退出函数 exit() 括号内部可以添加数字这也是退出码的一种。  exit与return的区别在于 在非main函数中return 并不会终止进程main函数会终止进程。 在任意函数中exit都会终止进程。 8.总结 查看进程运行完毕结果是否正确只需要看退出码即可 查看进程异常终止只需要查看收到的信号是什么即可。
http://www.zqtcl.cn/news/779953/

相关文章:

  • 网站商城前台模板免费下载自己做网站统计
  • 十大免费货源网站免费版本厦门建网站多少钱
  • 网站建设投标书范本深圳网页设计培训多少钱
  • 动态ip可以做网站北京万户网络
  • 网址大全免费网站中国建设银行驻莫斯科网站
  • 网站建设 教材 推荐网站导入
  • 网站备案扫描智能软件开发就业前景
  • 快速网站建设费用口碑营销图片
  • wordpress地址和站点地址错天津seo诊断
  • 张云网站建设做谷歌推广比较好的公司
  • 电子商务网站建设与管理的论文题目智能自助建站系统源码
  • 个人网站建设价格网站做视频转流量
  • 点网站出图片怎么做深圳市中心在哪
  • 企业网站建设58同城网站优化排名软件哪些最好
  • 最专业企业营销型网站建设企业宣传海报设计制作
  • 石家庄建站公司软件开发岗位介绍
  • 网站开发知识视频教程公司网站总感觉少点什么找什么人做
  • 做网站ps建立多大的画布网站排名监控工具
  • 烟台网站开发网站建设横幅标语
  • 微信公众号素材网站在线资源链接
  • 网站开发地图板块浮动国际重大新闻事件10条
  • 成品网站app开发wordpress宽度调整
  • 小型网站建设需要多少钱网站发布内容是否过滤
  • 网站如何推广运营漳平网站编辑价格
  • 海洋优质的网站建设企业微信下载官方网站
  • 十大免费ae模板网站wordpress 远程设置
  • 青岛网站的优化云南抖音推广
  • 做中英文版的网站需要注意什么如何偷别人dedecms网站的模板
  • 免费微网站制作最近三天发生的重要新闻
  • 网站优化网络推广seo编程软件python