我们知道shell forks()
,将其分配给不同的进程组,并使其成为前台进程组,这样cntrl-c
和cntrl-z
将转到子进程组,父进程等待它。但是,孩子完成后,父母如何取回终端呢?
我制作 shell。将上面的父级视为 myshell,将上面的子级视为我将给出的命令。child(command) 将使用 exec() 系列函数执行。我注意到我的父级(shell)没有得到终端返回(我已经使用tcgetpg(pid)
after进行了检查wait()
)。
答案1
有一个名为 的函数tcsetpgrp
可以为特定终端设置前台进程组,从而允许 shell 再次成为前台进程。另外,tcgetpgrp
您提到的函数采用文件描述符而不是 pid 作为参数。我建议查看这两个函数的手册页。