在我自己的shell中创建后台进程

时间:2012-03-14 16:24:28

标签: c shell unix

我正在编写自己的unix shell作为我的任务的一部分,我无法处理创建后台进程。我编写了一个信号处理函数,并在我的代码中实现了必要的(从我的观点 - 但显然不够好)部分,如下所示:

void handler(int sig)
{
    int pid;
    int status;
    pid = wait(NULL);
    printf("[%d]retval: %d \n", pid, WEXITSTATUS(status));
    fflush(stdout);
}

int main() { 
.....
....
struct sigaction sigchild; 
memset (&sigchild, 0, sizeof(sigchild)); 
sigchild.sa_handler = handler;
sigchild.sa_flags = SA_SIGINFO | SA_NOCLDWAIT;
...
...
if(isBackground)  //background process
{
    sigaction(SIGCHLD, &sigchild, 0);
}

当我进入“睡5&”时例如,然后输入“ps”以查看没有睡眠的进程。可能是什么问题?提前致谢。

1 个答案:

答案 0 :(得分:0)

孩子是后台进程。父级是前台进程。 SIGCHLD是孩子终止时发送给父母的信号。将if (isbackground更改为if(!background)