带有sigaction的C中的信号处理

时间:2017-04-01 13:17:05

标签: c shell unix background-process sigaction

我试图在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);
    }

0 个答案:

没有答案