进程fork、exit及wait函数

本文介绍了进程控制相关知识。进程是程序在数据集合上的运行活动,可通过创建、销毁等函数操作。如fork、vfork函数用于创建进程,exit等函数用于进程退出。还阐述了子进程与父进程的退出机制,以及wait、waitpid等函数用于获取子进程状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动。
我们通常使用进程的创建、销毁、退出、等函数对进程进行操作。
fork函数
pid_t fork(); // 父进程返回的是子进程的ID,子进程返回的是0
子进程会复制父进程的堆和栈和数据空间,但是共享代码段。代码段实现使用写时复制法,发现有不同的地方再分出一个修改的副本。同时,在fork函数执行之前已打开的文件描述符也会被复制到子进程中。
pid_t vfork(); // vfork函数表示先让子进程执行完毕再让父进程回复执行。

exit() 函数
进程有五种正常的以及三种不正常的终止方式。

  1. main函数return
  2. 跑到exit函数
  3. 跑到_exit函数
  4. 最后一个进程的最后一个线程退出
  5. 调用pthread_exit函数
    异常:
    1.调用abort,触发SIGABRT信号
    2.最后一个线程对取消请求作出响应。
    3.进程接收到退出的信号,信号可以由自身或者内核触发

子进程与父进程之间的退出机制
调用exit、_exit、_Exit函数退出的进程会在结束时记录进程的终止状态,在任意一种情况下,父进程都可以通过调用wait、waitpid函数获取子进程的进程状态信息
若父进程先退出,则子进程会将父进程ID变为1,即init进程的子进程,由init进程收养。
若子进程先退出,父进程可以通过wait、waitpid函数获取子进程的ID、进程终止状态以及CPU的时间总量,而那些没有善后的子进程会变成僵死进程。

wait和waitpid函数
pid_t wait(int *status);
pid_t waitpid(pid_t pid, int *status, int options);
wait函数在有一个子进程退出就返回,否则阻塞;waitpid函数可以选择停止的子进程和函数返回的子进程状态。

waitid函数
int waitid(dtype_t type, id_t id, siginfo_t *info, int optins);
还有wait3和wait4函数,这些函数都是比wait函数制定更加详细,可以等待指定的进程,并且返回进程的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值