百度
360搜索
搜狗搜索

linux子进程如何执行详细介绍

在 Linux 系统中,子进程的执行通常通过 fork() 创建子进程,然后通过 exec 族函数 让子进程执行新的程序。以下是详细的流程和实现方法:

一、创建子进程:
fork()

1. 函数作用

  • fork() 用于创建一个子进程,子进程是父进程的副本,二者共享代码段,但数据段、堆、栈等会通过 写时复制(Copy-on-Write) 机制分开。
  • 调用后会返回两次:
    • 父进程中返回 子进程的 PID(正整数)
    • 子进程中返回 0
    • 错误时返回 -1

2. 示例代码

c

 

pid

pid

pid

pid

二、子进程执行新程序:
exec 族函数

1. 为什么需要
exec

  • fork() 后,子进程默认执行父进程的后续代码。若想让子进程执行其他程序(如 /bin/ls 或自定义程序),需用 exec 族函数替换子进程的内存空间。

2.
exec 族函数

共有 6 个函数,功能相同,参数形式不同:

  • execl(const char *path, const char *arg, ...):按路径执行,参数逐个传递(以 NULL 结尾)。
  • execv(const char *path, char *const argv[]):按路径执行,参数通过数组传递。
  • execle(const char *path, const char *arg, ..., char *const envp[]):带环境变量的 execl
  • execve(const char *path, char *const argv[], char *const envp[]):带环境变量的 execv(唯一系统调用,其他为库函数)。
  • execvp(const char *file, const char *arg, ...):按文件名执行(会搜索 PATH 环境变量)。
  • execvpe(const char *file, char *const argv[], char *const envp[]):带环境变量的 execvp

3. 示例:子进程执行
ls -l

c

 

pid

pid

pid

三、核心流程总结

  1. 父进程调用 fork(),创建子进程。
  2. 子进程通过返回值 pid == 0 识别自己,并调用 exec 族函数。
  3. exec 函数用新程序替换子进程的内存空间,包括代码、数据、堆、栈等,子进程从新程序的 main 函数开始执行。
  4. 父进程通常调用 wait()waitpid() 等待子进程结束,回收资源。

四、关键特性

  • 写时复制(Copy-on-Write)fork() 后,父子进程共享内存,仅当其中一方修改数据时才复制,提高效率。
  • 独立地址空间exec 后,子进程与父进程完全独立,互不影响。
  • 错误处理exec 函数若失败(如文件不存在),会返回 -1,并继续执行 exec 之后的代码(需显式处理)。

五、常见场景

  • 启动外部程序:如 Shell 中输入命令时,父进程(Shell)创建子进程并通过 exec 执行命令。
  • 多任务处理:父进程创建多个子进程,每个子进程执行不同的任务(如 Web 服务器处理多个请求)。

通过 fork()exec 的配合,Linux 实现了灵活的进程创建与程序执行机制。

阅读更多 >>>  linux如何关闭138端口
上一篇: 下一篇:

文章数据信息:

本文主要探讨:"linux子进程如何执行", 浏览人数已经达到27次, 首屏加载时间:1.677 秒。