边缘计算在独立产品中的应用:从「中心化」到「边缘响应」
2026/7/30 8:38:49
父子进程内存管理子进程通过fork()创建时,初始阶段完全共享父进程的内存空间(采用写时复制技术)。只有当父子进程尝试修改同一内存区域时,内核才会为子进程分配独立的内存副本。这种机制优化了资源使用效率。
进程终止的8种情况
main中执行returnexit()函数(会清理I/O缓冲区和注册的退出函数)_exit()或_Exit()(直接终止,不清理缓冲区)pthread_exit()abort()、收到kill信号、最后一个线程被pthread_cancel僵尸进程与孤儿进程
init进程接管并自动回收资源。进程退出函数对比
exit(int status)atexit注册的函数 → 执行_exitEXIT_SUCCESS(0)或EXIT_FAILURE(1)_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适用于父进程需同时处理其他任务的情况。