MST

星途 面试题库

面试题:C语言在Linux环境下等待子进程的常用函数及区别

在Linux C语言编程中,常用的等待子进程的函数有wait()、waitpid() 。请阐述这两个函数的功能、参数含义以及它们之间的主要区别,并举例说明在何种场景下适合使用wait(),何种场景下适合使用waitpid()。
43.4万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试

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)。