我试图在C中实现一个简单的unix shell。但是,我的后台进程功能运行不正常。
当我运行shell并提供后台命令时,它会提供如下输出:
> sleep 4 &
> [10612]retval: 0
> [10616]retval: 0
> [10618]retval: 0
> [10619]retval: 0
> [10622]retval: 0
> [10623]retval: 0
问题是它给出了一段睡眠时间的输出,而它应该只给出第一个retval。
我的信号处理程序是
void handler(int s) {
int pid;
int status;
pid = waitpid(-1, NULL, WNOHANG);
printf("[%d]retval: %d \n", pid, WEXITSTATUS(status));
fflush(stdout);
}
我的sigaction是
struct sigaction act;
memset(&act, 0, sizeof(act));
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
act.sa_handler = handler;
那么,我的代码出了什么问题?
提前致谢...
编辑:另外,我有一个sigaction()
if (isBackground) {
sigaction(SIGCHLD, &act, 0);
}