僵死进程:
PCB存在,进程主体释放,子进程结束,父进程未获取子进程的退出码,从而子进程不得不保存退出码,所以整个PCB也就无法释放。子进程结束会向父进程发送一个SIGCHLD信号。
孤儿进程:孤儿进程会被init接管。
僵死进程处理办法:
- 父进程获取子进程的退出码:pid_t wait(int* reval);pid_t waitpid();这种方式可能导致父进程在wait或waitpid调用出现阻塞运行,直到子进程退出。(阻塞运行:所需条件未准备好,函数不会返回,直到条件满足,从而造成执行阻塞。非阻塞运行:函数调用,无论条件是否满足,函数都返回。)
- 父进程调用signal用于修改信号处理方式,signal(SIGCHLD,SIG_IGN),来忽略SIGCHLD信号,这样子进程结束后会由内核释放资源。
- 对子进程的退出捕获他们的退出信号SIGCHLD,父进程几首退出信号时,在信号处理函数中调用wait或者waitpid操作来释放他们的资源。(异步处理)signal(SIGCHLD,fun);
异步执行:两个以上的进程或者线程,执行互不影响,同时向下执行,当某个时刻,一个进程或线程会通过系统机制通知其他进程或线程。
同步执行:一个进程或者线程的执行需要通过依赖其他的进程或者线程的执行条件。两个进程之间的运行关系。