作为作业的一部分,我正在编写自己的 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);
}
例如,当我输入“sleep 5 &”然后输入“ps”以查看没有 sleep 的进程时。可能是什么问题?提前致谢。
最佳答案
子进程是后台进程。父进程是前台进程。 SIGCHLD是当 child 终止时发送给 parent 的信号。将 if (isbackground
更改为 if(!background)
关于在我自己的 shell 中创建后台进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705902/