2026/4/18 9:22:07
网站建设
项目流程
郑州网站建设亻汉狮网络,做公众好号的网站吗,wordpress404模板,wordpress pods父子进程关系与进程终止机制父子进程内存管理 子进程通过fork()创建时#xff0c;初始阶段完全共享父进程的内存空间#xff08;采用写时复制技术#xff09;。只有当父子进程尝试修改同一内存区域时#xff0c;内核才会为子进程分配独立的内存副本。这种机制优化了资源使用…父子进程关系与进程终止机制父子进程内存管理子进程通过fork()创建时初始阶段完全共享父进程的内存空间采用写时复制技术。只有当父子进程尝试修改同一内存区域时内核才会为子进程分配独立的内存副本。这种机制优化了资源使用效率。进程终止的8种情况主函数main中执行return调用exit()函数会清理I/O缓冲区和注册的退出函数调用_exit()或_Exit()直接终止不清理缓冲区主线程退出或调用pthread_exit()异常终止abort()、收到kill信号、最后一个线程被pthread_cancel进程终止后的状态管理僵尸进程与孤儿进程僵尸进程子进程终止但父进程未回收其PCB资源导致内核残留进程信息。长期运行的父进程若频繁创建短期子进程可能引发内核资源耗尽。孤儿进程父进程先终止子进程由init进程接管并自动回收资源。进程退出函数对比exit(int status)行为刷新缓冲区 → 调用atexit注册的函数 → 执行_exit状态码EXIT_SUCCESS0或EXIT_FAILURE1_exit(int status)行为直接终止进程不处理缓冲区或注册函数。进程资源回收方法wait函数pid_t wait(int *status);阻塞等待任意子进程退出并回收其状态。status参数若为NULL忽略退出状态。使用宏解析状态WIFEXITED(status)是否正常退出。WEXITSTATUS(status)获取退出返回值。WIFSIGNALED(status)是否因信号终止。WTERMSIG(status)获取终止信号的编号。waitpid函数pid_t waitpid(pid_t pid, int *status, int options);pid参数-1回收任意子进程等价于wait。0回收指定PID的子进程。0回收同进程组的子进程。-1回收指定进程组内的子进程。options参数0阻塞等待。WNOHANG非阻塞模式立即返回无子进程退出时返回0。示例非阻塞回收int status; pid_t pid waitpid(-1, status, WNOHANG); if (pid 0) { if (WIFEXITED(status)) { printf(Child %d exited with code %d\n, pid, WEXITSTATUS(status)); } }关键注意事项资源泄漏风险长期运行的父进程必须通过wait/waitpid回收子进程避免僵尸进程累积。信号处理若子进程因信号终止父进程需通过WTERMSIG检查具体信号。非阻塞模式WNOHANG适用于父进程需同时处理其他任务的情况。