1

我正在用c编写自己的shell,问题在于后台进程的实现。现在在 BASH 上,每当我们执行以“&”结尾的进程时,该进程进入后台并开始执行,后台进程的输出出现在终端上,当后台进程需要输入时,它会暂停,直到我们给出“fg”命令。

那么如何实现后台进程呢?

对于命令的任何正常执行(不以 & 结尾),我调用 fork 系统调用,然后在子进程中执行命令,父进程将等待子进程的执行(通过 wait())。

对于具有“&”的命令,我做了同样的事情,但父进程不会等待子进程的执行。我的问题是每当后台进程需要输入时,它就会控制终端。那么如何在需要输入时暂停子进程。

4

1 回答 1

0

要将进程与父进程分离,您需要在子进程上使用 setsid() ,它将在新会话中运行程序

 sid = setsid();

另见http://www.netzmafia.de/skripten/unix/linux-daemon-howto.html

于 2013-01-16T03:12:41.890 回答