![shell 如何在 wait() 之后获得终端的控制权?](https://linux22.com/image/70846/shell%20%E5%A6%82%E4%BD%95%E5%9C%A8%20wait()%20%E4%B9%8B%E5%90%8E%E8%8E%B7%E5%BE%97%E7%BB%88%E7%AB%AF%E7%9A%84%E6%8E%A7%E5%88%B6%E6%9D%83%EF%BC%9F.png)
我们知道shell forks()
,将其分配给不同的进程组,并使其成为前台进程组,这样cntrl-c
和cntrl-z
将转到子进程组,父进程等待它。但是,孩子完成后,父母如何取回终端呢?
我制作 shell。将上面的父级视为 myshell,将上面的子级视为我将给出的命令。child(command) 将使用 exec() 系列函数执行。我注意到我的父级(shell)没有得到终端返回(我已经使用tcgetpg(pid)
after进行了检查wait()
)。
答案1
有一个名为 的函数tcsetpgrp
可以为特定终端设置前台进程组,从而允许 shell 再次成为前台进程。另外,tcgetpgrp
您提到的函数采用文件描述符而不是 pid 作为参数。我建议查看这两个函数的手册页。