背景过程c

时间:2012-10-23 23:53:23

标签: c background operating-system

我正在制作一个shell,如果要将一个命令放在后台,我会感到很困惑。 我已经解析了我的命令,fork适用于前台的命令。我有它所以可以确定是否要在后台放置一个命令。如果是我的代码,我不确定该怎么办。任何有关如何处理背景命令的指针都将受到赞赏。

pid_t childpid;
int status; 
childpid = fork();
if (childpid >= 0)                            // fork succeeded 
{
    if (childpid == 0 && background == 0)     // fork() returns 0 to the child
    {
        if (execv(path, strs) < 0)
        {
            perror("Error on execv.");
        }
        exit(0);                              // child exits  
    }
    else if (childpid == 0 && background ==1)
    {
        // What goes here?              
    }
    else                                      // fork() returns new pid to the parent 
    {
        wait(&status);  
    }
}
else                                          // fork returns -1 on failure
{
    perror("fork");                           // display error message 
    exit(0); 
}

1 个答案:

答案 0 :(得分:1)

孩子并不关心它是否在后台运行,所以只需像往常一样调用exec。在过程中,您必须采取不同的行为。

首先,您不能再使用wait,因为这将阻止父进程。相反,您可以使用带有负pid的waitpidWNOHANG标志来检查已终止的子进程而不会阻塞。

另一个不涉及定期调用waitpid的常见解决方案是使用SIGCHLD信号,该信号将在子进程停止或终止时引发。

相关问题