【发布时间】:2015-04-15 18:08:21
【问题描述】:
我正在用 C 编写一个应该支持后台和前台进程的 shell。
约束:
- 信号处理程序应捕获终止的后台进程
- 没有全局变量可用于从信号处理程序进行通信
- 不允许进程/pid 列表
我的解决方案:
- Waitpid 直到前台进程终止
- 对于后台进程,立即返回提示
- 处理程序捕获 SIGCHLD,其中 waitpid 用于清除进程表
问题:
- 前台进程还会触发处理程序,导致两个 waitpid 之一出错
- 无法通过在运行前台进程时忽略 SIGCHLD 来解决,因为后台进程可能会在此期间终止
- 找不到让处理程序忽略特定 pid 的方法(前台进程已启动)
谢谢!
【问题讨论】: