进程同步与进程足迹详解
1. 基于 wait 的进程同步
在创建进程时,我们通常希望等待其执行结果。当子进程退出时,会向父进程发送 SIGCHLD 信号,默认情况下该信号会被忽略,但相关信息不会丢失。子进程的状态会一直保留在内存中,直到父进程使用以下 wait 函数之一来收集这些信息:
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
pid_t wait3(int *status, int options, struct rusage *rusage);
pid_t wait4(pid_t pid, int *status, int options, struct rusage *rusage);
等待子进程终止的操作被称为回收进程。如果父进程没有等待已终止的子进程,子进程会进入僵尸状态,此时内核仅保留足够的信息来告知父进程子进程的退出状态。
在 Linux 和 UNIX 系统中,无论子进程在父进程调用 wait 之前还是之后终止, wait 函数的行为基本相同。不过,如果在调用 wait 时子进程尚未终止,该函数可能会阻塞。若父进程先于子进程终止,子进程会被 init 进程(进程 ID 为 1)收养,当子进程终止时, init 进程会回收其状态。
以下是 wait
超级会员免费看
订阅专栏 解锁全文
1659

被折叠的 条评论
为什么被折叠?



