Java 里的 ProcessBuilder 底层是什么?fork 和 vfork 有什么区别?僵尸进程怎么产生又怎么清理?信号机制怎么用?一篇搞懂 Linux 进程管理的核心知识。
一、进程基础
1.1 进程 vs 线程 vs 协程
进程(Process):
独立的内存空间(虚拟地址空间)
独立的文件描述符表
独立的用户/权限
创建开销大(复制页表、文件描述符等)
通信需要 IPC(管道、共享内存、Socket 等)
线程(Thread):
共享进程的地址空间
共享文件描述符、信号处理
独立的栈、寄存器、PC
创建开销小
通信简单(共享内存)
协程(Coroutine):
用户态调度(不需要内核参与)
共享线程的栈(或独立的小栈)
创建开销极小(KB 级)
不能利用多核(需要多线程+多协程)
┌─────────────────────────────┐
│ 进程 (Process) │
│ ┌─────────┐ ┌─────────┐ │
│ │ 线程 1 │ │ 线程 2 │ │
│ │ ┌──┐┌──┐│ │ ┌──┐ │ │
│ │ │协││协││ │ │协│ │ │
│ │ │程││程││ │ │程│ │ │
│ │ └──┘└──┘│ │ └──┘ │ │
│ └─────────┘ └─────────┘ │
│ 独立的地址空间 │
└─────────────────────────────┘
2026/7/3大约 10 分钟