gpt4 book ai didi

c - 信号处理程序和 waitpid 共存

转载 作者:太空宇宙 更新时间:2023-11-04 04:37:17 24 4
gpt4 key购买 nike

我正在用 C 编写一个 shell,它应该支持后台和前台进程。

约束:

  • 终止的后台进程应由信号处理程序捕获
  • 没有全局变量可用于与信号处理程序进行通信
  • 不允许列出进程/pids

我的解决方案:

  • 等待 pid 直到前台进程终止
  • 对于后台进程,立即返回提示
  • 处理程序捕获 SIGCHLD,其中 waitpid 用于清除进程表

问题:

  • 前台进程也触发处理程序导致两个 waitpids 之一出错
  • 无法通过在运行前台进程时忽略 SIGCHLD 来解决,因为后台进程可能会在此期间终止
  • 找不到使处理程序忽略特定 pid(前台进程已启动)的方法

谢谢!

最佳答案

Problem:

  • Foreground processes also trig handler causing one of two waitpids to error

这不是问题 - 然后离开处理程序。

void handler(int signum)
{
pid_t pid;
while (pid = waitpid(-1, NULL, WNOHANG), pid > 0)
fprintf(stderr, "%d terminated\n", pid);
}

关于c - 信号处理程序和 waitpid 共存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29657624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com