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

申报湖南创新型省份建设专项网站如何对网站ftp进行上传

申报湖南创新型省份建设专项网站,如何对网站ftp进行上传,网站制作难度,网页制作基础教程黄洪杰进程程序替换 进程程序替换是指将一个正在运行的进程替换为另一个可执行程序。它的本质是调用了Linux操作系统中的exec系统调用。而exec系统调用是一个家族函数#xff0c;例如execl、execv、execle、execve等。它们的共同特点是当当前进程执行到该函数时#xff0c;就会直接…进程程序替换 进程程序替换是指将一个正在运行的进程替换为另一个可执行程序。它的本质是调用了Linux操作系统中的exec系统调用。而exec系统调用是一个家族函数例如execl、execv、execle、execve等。它们的共同特点是当当前进程执行到该函数时就会直接跳转到新的程序并开始执行新的可执行文件。 exec系统调用 所以我们要想知道怎样进行进程程序替换就要先会使用exec系统调用,而且exec系统调用的家族函数只要掌握了一个其他的也就大差不差了。 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。如果调用出错则返回-1所以exec函数只有出错的返回值而没有成功的返回值。 所以就先详细的讲一下execl函数。 execl系统调用函数 #include unistd.hint execl(const char *path, const char *arg0, ..., const char *argn, (char *)0); 该函数接受可执行文件的路径path以及一系列的参数arg0至argn最后以一个空指针(char *)0结尾。arg0代表可执行文件本身即argv[0]arg1到argn是命令行参数。 代码示例 int main() {coutbefore execlendl;//执行前execl(/usr/bin/ls,ls,-l,-a,NULL);//必须以空结束coutafter execlendl;//执行后return 0; }我们不难发现我们自己写的一个可执行程序运行的时候在调用execl函数时会执行新的命令可执行程序文件而且在执行完成之后就直接结束了并没有执行我们自己写的可执行程序的后续操作。就相当于在代码中调用其他程序。所以可以初步得出当execl函数成功执行时当前进程将被替换为指定的可执行文件并从该文件开始执行。注意execl函数不会创建新的进程而是将当前进程替换为新的可执行文件。 函数如果调用成功则加载新的程序从启动代码开始执行,不再返回。 如果调用出错则返回-1 所以exec函数只有出错的返回值而没有成功的返回值。 执行原理 当我们运行我们的可执行程序时该程序就已经变成了进程了所以自然就少不了进程PCB以及进程地址空间和页表和代码数据所映射的物理内存。但是当我们执行到execl函数时就要开始执行一个已有的全新程序并不创建进程而该已有的程序文件自然存在磁盘当中所以我们运行这个新的程序时就要将程序加载进内存。但是关键的是该新程序中的代码和数据并不是另存的而是直接以覆盖式的存放在原进程的代码和数据所在物理内存中对应的位置并继续从新程序的启动例程开始执行。 以上就是单进程程序替换的过程 多进程的程序替换  int main() {pid_t ifork();if(i0)//子进程{ coutbefore execl,mypid:getpid()endl;execl(/usr/bin/ls,ls,-l,-a,NULL);//必须以空 结束coutafter execl,mypid:getpid()endl;}else//父进程{pid_t retwaitpid(-1,NULL,0);if(reti)cout等待成功,retendl;}return 0; }我们知道开始我们就创建了一个子进程而创建子进程的特点就是数据独立以写时拷贝的方式存在代码共享。而此时子进程执行execl函数,所以子进程就替换成了ls-a-l的一个程序此时新程序的代码数据会覆盖在物理内存上。我们知道正常情况下父子进程数据发生改变时会以写时拷贝的方式另存空间但是代码并不会。可是此时情况特殊所以代码同样也会以写时拷贝的方式另存空间。归根结底还是进程具有独立性 所以回到开始为什么execl函数之后的代码不执行其实就是程序替换导致原进程的代码数据被新程序的代码数据覆盖所以后续的代码自然就没有了更不可能被执行。 其实我们的进程切换对语言是没要求的可以自己随意地切换成其他语言的程序不一定只切换成同语言的程序。 程序替换总结 程序替换是指将当前运行中的进程完全替换为一个新的程序。简单来说就是将当前进程的代码、数据和堆栈等内容替换为新程序的代码、数据和堆栈。 当一个进程执行程序替换时原来进程的代码、数据和堆栈被新程序覆盖然后开始执行新程序的代码。这意味着原来进程的运行状态、打开的文件、socket连接等都会丢失并且无法恢复。新程序从main函数开始执行其运行过程与原程序无关。 而且对于需要传环境变量的exec类系统调用函数而言环境变量属于全局的字符指针数组类型的变量environ而且一个进程的环境变量是源于其父进程的环境变量也就是说子进程会继承父进程的环境变量。不仅仅是创建子进程时会继承环境变量和命令行参数而对于进程切换时也是会继承下来的。而对于进程替换而言原进程会采用覆盖环境变量内容的方式让新的进程继承下来也就是说如果原进程调用函数接口时传入的环境变量是自己写的环境变量的话那么切换的新进程会将原进程的环境变量里的内容继承下来。但是如果不想覆盖式传递的话可以采用putenvchar* env_val函数在原环境变量表里去添加新的环境变量env_val此时就不会清空原环境变量里的内容而是添加内容后的环境变量传递给新的进程main函数的第三个参数当中。
http://www.pierceye.com/news/803821/

相关文章:

  • 有做网站吗个人站长网站
  • 免费网站模板下载图怪兽在线制作
  • 黑龙江网站设计公司广告海外推广
  • 农产品网站建设策划国际新闻最新10条
  • 南通制作网站公司开发公司与物业公司移交协议
  • 做网站为什么很复杂最简单的免费网站制作模板
  • 高端网站公司书画工作室网站模板网站建设
  • 招标网站免费平台永州做网站公司
  • 企业网站建设 cmsphp网站建设方案
  • 自适应网站建设沈阳潍坊制作网站的公司
  • lamp网站开发黄金组合下载宣传页模板
  • 精通网站建设100全能建站密码摄影学习网站
  • 重庆如何软件网站推广陕西省诚信建设示范网这个网站
  • 怎样做关键词网站wordpress建站购买
  • app开发模板网站老网站备案密码错误
  • 北京展示型网站建设价格seosem是指什么意思
  • 网站开发费用构成论坛静态网站源码
  • 百度怎么把自己网站展现在百度森动网网站建设好吗
  • 城市生活网官方网站app成都设计院
  • 移动网站开发实训报告清远企业网站建设
  • 手机版网站如何做陕西城乡建设网站
  • 大连网站建设事件营销的特点
  • 做语音聊天网站要多少钱app界面设计模板素材免费
  • 设计网站专题页包括那些项目个人做网站要买什么域名
  • 建网站 方法中信建设有限责任公司获奖
  • 做宠物商品的网站无锡自适应网站开发
  • 网站后台怎样登陆做网站数据库及相关配置
  • 昆明seo网站排名网站代码 输入文字 跳出内容
  • 济南建站公司网站广州市网站设计
  • 网站模板做的比较好的公司网站制作汇报会