进程与线程学习指南
1. 进程基础
进程是线程运行的环境,它包含内存映射、文件描述符、用户和组 ID 等。系统的第一个进程是 init
进程,由内核在启动时创建,其 PID 为 1。后续进程通过 fork
操作创建。
1.1 创建新进程
使用 fork(2)
函数来创建新进程。每次成功调用该函数会有两个返回值:一个在调用该函数的父进程中,另一个在新创建的子进程中。调用后,子进程是父进程的精确副本,它们具有相同的栈、堆、文件描述符,并从 fork
之后的代码行开始执行。区分父子进程的方法是查看 fork
的返回值,子进程返回 0,父进程返回新创建子进程的 PID,若返回值为负则表示 fork
调用失败。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main(void)
{
int pid;
int status;
pid = fork();
if (pid == 0) {
printf("I am the child, PID %d\n", getpid());
sleep(10);
exit(42);
} else if (pid > 0) {