详解C语言中的wait()函数和waitpid()函数
在Linux系统编程中,wait()和waitpid()函数可以用来等待进程的终止,以及获得进程的退出状态。在本文中,我们将介绍这两个函数的使用方法以及相应的示例代码。
wait()函数
wait()函数会暂停当前进程的执行,直到它的子进程结束为止。如果子进程已经终止,wait()函数会立即返回,否则将一直阻塞等待,直到子进程终止。
wait()函数的原型如下:
#include <sys/wait.h>
pid_t wait(int *status);
其中,参数status是一个整型指针,用于存储子进程的退出状态。
下面是一个简单的示例程序,它先派生了一个子进程,在子进程中调用exit()函数退出,然后父进程调用wait()函数等待子进程的结束,并获取子进程的退出状态。
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid < 0) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) { // child process
printf("child process\n");
exit(EXIT_SUCCESS);
} else { // parent process
printf("parent process\n");
int status;
wait(&status);
printf("child exit status: %d\n", status);
}
return 0;
}
输出结果如下:
parent process
child process
child exit status: 0
waitpid()函数
waitpid()函数的功能和wait()函数类似,都是等待指定进程的结束。但waitpid()函数比wait()函数更加灵活,可以指定等待的进程和等待的选项。
waitpid()函数的原型如下:
#include <sys/wait.h>
pid_t waitpid(pid_t pid, int *status, int options);
其中,pid参数是等待的进程ID,status参数与wait()函数的status参数含义相同,options参数指定等待的选项,通常为0。
下面是一个示例程序,演示了waitpid()函数的用法。该程序首先创建一个子进程,然后父进程等待子进程结束,而子进程则休眠5秒后退出。
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
int main() {
pid_t pid = fork();
if (pid < 0) {
perror("fork");
exit(EXIT_FAILURE);
} else if (pid == 0) { // child process
printf("child process sleeping...\n");
sleep(5);
printf("child process exiting...\n");
exit(EXIT_SUCCESS);
} else { // parent process
printf("parent process waiting...\n");
int status;
waitpid(pid, &status, 0);
printf("child process exit status: %d\n", status);
}
return 0;
}
输出结果如下:
parent process waiting...
child process sleeping...
child process exiting...
child process exit status: 0
总结
wait()函数和waitpid()函数都可以用于等待子进程结束,并获取子进程的退出状态。waitpid()函数比wait()函数更加灵活,可以指定等待的进程和等待的选项。
在使用这两个函数时,一定要注意处理可能出现的错误,并及时释放资源。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解C语言中的wait()函数和waitpid()函数 - Python技术站