Linux 中解释的 fork、exec、wait 和 exit 系统调用

可以单次、多次或同时执行的指令和数据序列称为程序。 该过程是此类程序的执行。 所以这些进程可以运行很多程序。 在同一个进程中,操作系统可以加载不同的程序。 当前目录、权限、文件句柄等重用的进程状态由新程序继承。 此类事情与 fork()、exec()、wait() 和 exit() 等系统调用在同一级别完成。

在本文中,我们将通过示例和用例详细讨论 Linux 系统调用 fork()、exec()、wait() 和 exit()。

叉()

fork() 是在 Linux/Unix 系统中非常特殊和有用的系统调用之一。 进程使用它来创建作为自身副本的进程。 在这样的系统调用的帮助下,子进程可以由父进程创建。 直到子进程执行完毕,父进程才会挂起。

fork() 的一些重点如下。

  • 父进程将获得具有非零值的子进程 ID。
  • 零值返回给孩子。
  • 如果在创建子进程时出现任何系统或硬件错误,则将 -1 返回到 fork()。
  • 有了子进程获得的唯一进程ID,它不匹配任何现有进程组的ID。

为了详细说明 fork(),让我们举一个例子来阐明 fork() 的概念。

$ sudo vim fork.c

这是复制/粘贴它的代码:

#include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h>  int main(int argc, char **argv) { pid_t pid; pid = fork(); if(pid==0) { printf("It is the child process and pid is %dn",getpid()); exit(0); } else if(pid > 0) { printf("It is the parent process and pid is %dn",getpid()); } else { printf("Error while forkingn"); exit(EXIT_FAILURE); } return 0; }

输出:

$make fork