信号处理程序和waitpid共存
我在C中编写一个应该支持后台和前台进程的shell。
约束:
- 终止的后台进程应该由信号处理程序捕获
- 没有全局变量可用于从信号处理程序进行通信
- 没有允许的进程/ pid列表
我的解决方案
- Waitpid直到前台进程终止
- 对于后台进程,立即返回提示
- Handler捕获SIGCHLD,其中waitpid用于清除进程表
问题:
- 前台进程还会触发处理程序,导致两个waitpids中的一个出错
- 在运行前台进程时无法通过忽略SIGCHLD来解决,因为后台进程可能在此期间终止
- 找不到让处理程序忽略特定pid的方法(前台进程已启动)
谢谢!
问题:
- 前台进程还会触发处理程序,导致两个waitpids中的一个出错
这不是问题 – 然后离开处理程序。
void handler(int signum) { pid_t pid; while (pid = waitpid(-1, NULL, WNOHANG), pid > 0) fprintf(stderr, "%d terminated\n", pid); }