在Linux环境下,当一个进程调用exit函数或者接收到退出信号时,会触发一系列操作来结束进程
- 调用exit函数或者接收到退出信号。
- 如果进程注册了信号处理函数(signal handler),那么首先会执行相应的信号处理函数。信号处理函数可以通过signal()或sigaction()函数注册。
- 在信号处理函数执行完毕后,进程会进入退出状态。此时,进程会关闭所有打开的文件描述符、清理内存等资源。
- 进程会变成僵尸(zombie)状态,等待父进程回收其资源。这是因为子进程的退出状态需要被父进程获取,以便父进程知道子进程是否正常退出。
- 父进程通过wait()或waitpid()函数等待子进程退出,并获取子进程的退出状态。当父进程调用这些函数时,子进程的资源会被回收,子进程会从僵尸状态变为死亡状态。
- 最后,操作系统会将进程从进程表中删除,释放进程占用的内存等资源。
总结一下,exit函数和进程退出时信号处理的顺序如下:
- 调用exit函数或接收到退出信号。
- 执行信号处理函数。
- 关闭文件描述符、清理资源。
- 变成僵尸状态,等待父进程回收资源。
- 父进程调用wait()或waitpid()函数,回收资源。
- 从进程表中删除,释放资源。