【发布时间】:2012-06-02 11:43:30
【问题描述】:
我正在为我的 CS 类编写一个 shell,如果用户传入了“&”字符,则该项目的一部分涉及在后台运行一个进程。
如果一个进程在前台运行,我只需execvp 该进程,它仍然控制着终端,因为它在前台。但是,如果它是后台进程,我必须在开始执行该进程后将控制权返回给我的主 shell。我知道系统调用tcsetpgrp(pid_t) 将作为参数传入的进程放在前台,但我不太明白如何使用它。
如果是后台进程,我应该在execvp 之后调用tcsetpgrp 吗?如果是这样,我可以通过调用getpid获取我的shell的pid吗?
【问题讨论】:
-
让我们试试这个。在您最喜欢的终端中启动两个会话。在第一个中运行一个命令,比如说 cat,它在 fg 中。切换到其他会话,用ps找到cat的pid。使用 kill 向其发送信号 SIGSTOP。观察发生了什么并分享您的发现。
标签: c linux shell background-process process-group