Linux下fork和exec的区别表现在哪
Admin 2022-07-20 群英技术资讯 664 次浏览
linux中fork和exec的区别:1、fork用于创建一个新的进程,称为子进程,而exec则是用指定的程序替换当前进程的全部内容;2、exec的前后进程id没有改变,而fork重新创建了子进程后id改变了。
本教程操作环境:linux7.3系统、Dell G3电脑。
fork和exec都是和进程相关的调用.
fork
调用fork可以创建一个新的进程称为子进程, 调用fork函数的进程称为父进程, 子进程的所有内容都和父进程相同, 除了pcd(进程控制模块), 如果这两个进程都没有对内存做写操作的话, 那么两个进程共享调用fork函数的进程的内存页, 这样表面上看fork创建进程比exec创建进程快. 但只要两个进程其中一个对内存做了修改, 那么在修改之前, 就会把内存页复制一份给子进程用.
exec
调用exec创建进程, 实际上不是创建进程, 更准确的说是加载可执行文件, 调用exec后会把exec中指定的可执行文件加载到调用exec的进程的空间内, 并把调用exec的进程的内存更新为exec中指定的可执行文件的内容.
区别
fork主要是Linux用来建立新的进程(线程)而设计的,exec()系列函数则是用来用指定的程序替换当前进程的全部内容。因此exec()系列函数常常在前三个函数使用以后调用,来建立一个全新的程序运行环境。Linux用init进程启动其余进程的过程通常都是这样的
fork是最简单的调用,不须要任何参数,仅仅是在建立一个子进程并为其建立一个独立于父进程的空间。
我们用fork函数创建新进程后,经常会在新进程中调用exec函数去执行另外一个程序(比如在我们写程序时需要使用我们之前的写过的某个程序的功能,通过该方式直接去调用一个可执行程序可以大大的简化我们的程序)。当进程调用exec函数时,该进程被完全替换为新程序。因为调用exec函数并不创建新进程,所以前后进程的ID并没有改变。
父进程通过fork()的方式产生一个一模一样的子进程,创建出来的子进程再以exec函数的方式来执行其实际要执行的进程,最终就成为一个可以执行某些特定功能的子进程。
一个进程一旦调用exec类函数,它本身就“死亡”了,系统把代码段替换成新的程序的代码,废弃原有的数据段和堆栈段,并为新程序分配新的数据段与堆栈段,唯一留下的,就是进程号,也就是说,对系统而言,还是同一个进程,不过已经是另一个程序了。即调用exec族函数后,其后面的程序都不会在执行了。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
linux中默认有三个分区:1、boot分区,该分区是存储内核及在引导过程中使用文件的分区,是启动linux时使用的一些核心文件;2、swap分区,该分区是linux下的虚拟内存分区,作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用;3、根分区,也即系统分区,系统内所有的东西都存放在根分区中,也被称为root分区。
日志记录中HTTP状态码出现499错误有多种情况,我遇到的一种情况是nginx反代到一个永远打不开的后端,就这样了,日志状态记录是499、发
linux查看进程的方法:1、ps命令,查看静态的进程统计信息;2、top命令,查看进程动态信息;3、pgrep命令,根据特定条件查询进程PID信息;4、pstree命令,查看进程树,以树形结构列出进程信息。
linux网关设置方法是什么? 网关是一种充当转换重任的计算机系统或设备。那么linux下网关如何设置呢?一些对电脑操作系统不熟悉的朋友可能不是很了解,因此下面小编就给大家分享一下设置linux网关的方法,五个步骤就可以解决
今天和大家介绍ssh的几个应用,常见的应用有使用ssh连接远程的服务器、使用sftp进行文件的传输、通过ssh进行异地备份等。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008