C 语言中的 wait 函数 您所在的位置:网站首页 fork函数需要什么头文件 C 语言中的 wait 函数

C 语言中的 wait 函数

2024-05-09 21:31| 来源: 网络整理| 查看: 265

在 C 语言中使用 wait 函数来等待子进程的状态变化 在 C 语言中使用 waitpid 函数来等待特定子进程的状态变化

本文将演示关于如何使用 C 语言中的 wait 函数的多种方法。

在 C 语言中使用 wait 函数来等待子进程的状态变化

wait 函数是符合 POSIX 标准的系统调用的封装器,定义在 头文件中。该函数用于等待子进程的程序状态变化,并检索相应的信息。wait 通常在创建新子进程的 fork 系统调用之后调用。wait 调用会暂停调用程序,直到它的一个子进程终止。

用户应该将代码结构化,使调用进程和子进程有两条不同的路径。通常用 if...else 语句来实现,该语句评估 fork 函数调用的返回值。注意 fork 在父进程中返回子进程 ID,一个正整数,在子进程中返回 0。如果调用失败,fork 将返回-1。

#include #include #include #include int main() { pid_t c_pid = fork(); if (c_pid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (c_pid == 0) { printf("printed from child process %d", getpid()); exit(EXIT_SUCCESS); } else { printf("printed from parent process %d\n", getpid()); wait(NULL); } exit(EXIT_SUCCESS); } 在 C 语言中使用 waitpid 函数来等待特定子进程的状态变化

waitpid 是 wait 函数的一个略微增强的版本,它提供了等待特定子进程和修改返回触发行为的功能。waitpid 除了子进程被终止的情况外,还可以返回子进程是否已经停止或继续。

在下面的例子中,我们从子进程调用 pause 函数,子进程进入睡眠状态,直到收到信号。另一方面,父进程调用 waitpid 函数,暂停执行,直到子进程返回。并利用宏 WIFEXITED 和 WIFSIGNALED 分别检查子进程是正常终止还是被信号终止,然后将相应的状态信息打印到控制台。

#include #include #include #include int main() { pid_t child_pid, wtr; int wstatus; child_pid = fork(); if (child_pid == -1) { perror("fork"); exit(EXIT_FAILURE); } if (child_pid == 0) { printf("Child PID is %d\n", getpid()); pause(); _exit(EXIT_FAILURE); } else { wtr = waitpid(child_pid, &wstatus, WUNTRACED | WCONTINUED); if (wtr == -1) { perror("waitpid"); exit(EXIT_FAILURE); } if (WIFEXITED(wstatus)) { printf("exited, status=%d\n", WEXITSTATUS(wstatus)); } else if (WIFSIGNALED(wstatus)) { printf("killed by signal %d\n", WTERMSIG(wstatus)); } } exit(EXIT_SUCCESS); }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有