系统编程—进程2
2026/6/14 5:55:42 网站建设 项目流程

一、进程关系与写时复制

子进程是父进程的一个复制品(副本)。

写时复制:Linux2.6及后续版本中,子进程通过fork创建时采用写时复制机制:fork刚完成时,子进程并不单独开辟空间,而是与父进程共享全部内存;仅当父子进程中任意一个修改某变量或内存区域,子进程才会为该部分内存开辟独立空间,实现按需复制。

二、进程的终止情况

1.main中return :触发进程退出,return 的值作为进程退出码

2.exit() c库函数,会执行io库的清理工作,关闭所有的流,以及所有打开的文件。

3._exit_Exit 会关闭所有的已经打开的文件,不执行清理函数。

4.主线程退出:主线程执行完毕退出,导致整个进程终止

5.主线程调用pthread_exit 异常终止

6.abort():主动触发 SIGABRT 信号,强制终止进程

7.signal kill pid :通过信号(如 SIGKILL/SIGTERM 等)终止进程

8.最后一个线程被pthread _cancle :取消最后一个存活线程,导致进程终止

三、退出后的进程

1.僵尸进程:父进程创建子进程后,子进程先消亡。对应用户内存空间释放,子进程也不会被调度了。但是内核空间中的对应的pcb块,没有释放。

2.孤儿进程:父进程创建子进程后,父进程先消亡。子进程会寻找新的父进程。

四、退出函数

1.exit函数

功能:让进程退出,并刷新缓存区

参数:status:进程退出的状态。

void exit(int status) exit(1);

2._exit 系统调用

功能:让进程退出,不刷新缓存区

参数:status:进程退出的状态。

void _exit(int status);

3.pid_t wait 函数

pid_t wait(int *status);

功能:该函数可以阻塞等待任意子进程退出
并回收该进程的状态。
只能父进程回收子进程状态。
参数:status 进程退出时候的状态
如果不关心其退出状态一般用NULL表示
如果要回收进程退出状态,则用WEXITSTATUS回收。
WIFEXITED(status) :是不是正常结束
WEXITSTATUS(status): 使用这个宏去那返回值
WIFSIGNALED(status) :是不是收到了信号而终止的
WTERMSIG(status):如果是信号终止的,那么是几号信号。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询