2
我正在制作一个shell,我很困惑如果命令放在后台怎么办。 我已经解析了我的命令,fork对前台的命令有效。我有它,所以可以确定命令是否放在后台。我真的不知道如果我的代码在第一个人该做什么。任何关于如何处理后台命令的指针都会被赞赏。后台进程c
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);
}
正如Joachim所说,它是不同的父代码,而不是子代码。作为一个细节,你可能希望孩子在不能执行'execve()'时以非零的退出代码(1,或者如果你想成为POSIX兼容的话可能是126或127)死掉。此外,你有一个“浓密的”决策树。尝试重写代码以避免在作出决定后立即作出决定:if(childpid <0)... error ... else if(childpid == 0)... execve ... else if(background == 0 )...等待循环...其他...进程在后台运行...'。注意'等待循环';您可能会完成前面的后台进程。 –