面试题答案
一键面试1. wait()函数
- 功能:用于使父进程暂停执行,等待其任意一个子进程结束,并回收子进程的资源。
- 参数:
int *status
,是一个指向整数的指针,用于获取子进程的退出状态。若不关心子进程退出状态,可传入NULL
。 - 示例场景:当父进程不关心具体是哪个子进程结束,只需要等待任意一个子进程完成任务并回收其资源时,适合使用
wait()
。比如一个简单的批处理任务,多个子进程分别执行不同的文件处理任务,父进程只需等待所有任务都完成即可。
2. waitpid()函数
- 功能:可以使父进程等待指定的子进程结束,或者等待子进程状态改变,并回收子进程的资源。
- 参数:
pid_t pid
:指定等待的子进程ID。pid > 0
时,等待进程ID为pid
的子进程;pid = 0
时,等待与调用进程在同一进程组的任意子进程;pid = -1
时,功能等同于wait()
,等待任意一个子进程;pid < -1
时,等待进程组ID等于pid
绝对值的子进程。int *status
:同wait()
中的status
,用于获取子进程退出状态。int options
:提供一些额外的选项,如WNOHANG
表示若指定子进程未结束,函数立即返回而不阻塞父进程;WUNTRACED
表示若子进程进入暂停状态也会报告。
- 示例场景:当父进程需要等待特定的子进程完成任务时,适合使用
waitpid()
。例如在一个复杂的多进程系统中,某个关键子进程执行重要操作,父进程必须等待该子进程完成后再执行后续操作,此时可通过指定该子进程ID使用waitpid()
。
3. 主要区别
- 等待对象:
wait()
等待任意一个子进程结束;waitpid()
可根据pid
参数指定等待特定子进程。 - 阻塞特性:
wait()
默认是阻塞的,直到有子进程结束;waitpid()
通过options
参数可以设置为非阻塞模式(如使用WNOHANG
)。