操作系统 fork()和exec()的区别
计算机系统有两个模式:内核模式和用户模式。在内核模式下,程序可以直接访问内存和硬件资源。在用户模式下,程序不能直接访问硬件和内存资源。因此,内核模式比用户模式拥有更高的特权。UNIX系统使用各种系统调用,其中包括fork和exec。在本文中,你将了解到fork()和exec()之间的区别。但在讨论它们之前,你必须了解fork和exec是什么。
什么是fork()
fork()系统调用有助于创建进程。当一个进程使用fork()系统调用时,它创建了一个自身的副本。父进程是已经存在的进程,而子进程是新创建的进程。尽管子进程与父进程相同,但在创建子进程时,父进程的状态(如打开的文件、地址空间和变量)会被复制到子进程中。换句话说,子进程和父进程位于独立的物理地址空间中。因此,在父进程中所做的修改不会出现在子进程中。
什么是exec()
exec()系统调用用于创建进程。当使用exec()函数时,当前运行的进程将被终止并替换为新创建的进程。换句话说,在调用exec()之后,只有新的进程才会继续存在,父进程将被关闭。这个系统调用还将用子进程替换父进程的代码段、地址空间和数据段。
fork()和exec()的主要区别
在这里,您将学习fork()和exec()之间的主要区别。fork()和exec()之间的各种差异如下:
- 在UNIX操作系统中,fork是一个允许进程复制自身的命令。然而,在UNIX操作系统中,exec是通过替换现有进程来创建一个新进程的命令。
- fork() 使得子进程等于父进程。另一方面, exec() 创建一个子进程并替换成父进程。
- 在调用 fork() 之后,会有一个子进程和一个父进程。相反,在调用 exec() 之后,只有一个子进程。
- 在 fork() 中,父进程和子进程在不同的地址空间中。另一方面,在 exec() 中,子进程替换了父进程的地址空间。
fork()和exec()之间的头对头比较
在这里,您将学习fork()和exec()之间的头对头比较。fork()和exec()之间的各种关键对比如下:
特性 | Fork() | Exec() |
---|---|---|
定义 | 它是一个允许进程复制自身的命令。 | 它是一个通过替换现有进程来创建新进程的命令。 |
地址空间 | fork()中的父进程和子进程在不同的地址空间中。 | exec()中,子进程的地址空间取代父进程的地址空间。 |
父进程 | 调用fork()函数后,会有一个子进程和一个父进程。 | 调用exec()后,只有一个子进程。 |
结果 | fork()使子进程等于父进程。 | exec()创建一个子进程并替换为父进程。 |