温馨提示×

linux进程如何启动

小樊
36
2026-07-10 05:53:57
栏目: 智能运维

在 Linux 中,进程的启动方式可以从“用户视角”和“内核视角”两个层面来理解。下面用通俗但系统的方式说明。


一、从用户角度看:进程是如何启动的

1️⃣ 在 shell 中启动进程(最常见)

当你在终端执行一个命令时,其实是在 启动一个新进程

ls

背后发生了什么?

  1. Shell(如 bash)是一个进程
  2. Shell 调用 fork() 创建一个子进程
  3. 子进程调用 exec() 系列函数,把 ls 程序加载进来
  4. ls 进程开始运行

fork + exec 是 Linux 启动新进程的标准方式


2️⃣ 后台启动进程

sleep 100 &
  • & 表示后台运行
  • 仍然是 fork + exec
  • 父进程(shell)不等待子进程结束

3️⃣ 通过程序代码启动进程(C 语言示例)

#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid == 0) {
        // 子进程
        execl("/bin/ls", "ls", NULL);
    } else {
        // 父进程
        wait(NULL);
    }
}

二、从系统角度看:进程是如何诞生的

✅ 所有进程都由另一个进程创建(除了 0 号进程)

Linux 进程创建关系:

swapper(PID 0)
 └── init / systemd(PID 1)
      └── 各种用户进程

关键系统调用

系统调用 作用
fork() 复制当前进程,创建子进程
exec() 用新程序替换当前进程
clone() 创建线程/进程(更底层)
wait() 父进程等待子进程结束

三、init / systemd 启动进程(系统启动)

系统启动流程(简化)

  1. BIOS / UEFI
  2. 内核加载
  3. 内核启动 init(或 systemd,PID 1)
  4. systemd 启动各种系统服务(都是进程)

示例:

systemctl start nginx
  • systemd 会 fork + exec nginx
  • nginx 通常以 daemon 形式运行

四、进程启动的几种常见方式总结

启动方式 示例
命令行 ls, vim
后台运行 command &
程序调用 fork + exec
系统服务 systemctl start xxx
定时任务 cron, at
脚本执行 bash test.sh

五、查看进程如何启动

ps -ef

或查看某个进程:

cat /proc/PID/cmdline

查看父进程:

ps -o pid,ppid,cmd

六、一句话总结

Linux 中,新进程几乎总是通过“已有进程调用 fork() 创建子进程,再调用 exec() 加载新程序”启动的。

如果你愿意,我也可以:

  • 图解方式画进程创建流程
  • fork 和 exec 的区别
  • 进程 vs 线程
  • 容器(Docker)里进程如何启动

你想深入哪一块?

0