2013-01-16 189 views
1

我在c写自己的shell,问题是在执行后台进程。 现在。只要我们执行与“&”,那么该过程进行背景 结束一个进程并开始执行BASH,后台进程的输出来对终端时后台进程需要输入则暂停,直到我们给“FG”命令。执行unix终端后台进程。

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

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

而对于'&'命令我做了同样的事情,但父母不会等待子进程的执行。这里我的问题是,只要后台进程需要输入,就可以控制终端。所以如何在需要输入时暂停子进程。

+0

您拍照时一看在bash源代码? http://ftp.gnu.org/gnu/bash/ –

回答

0

从父分离的过程中,你需要对孩子过程中使用setsid(),它会在新的会话中运行的程序

sid = setsid(); 

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

+0

setsid用于创建新会话。这涉及三个步骤:(a)成为新会话的会话领导者, (b)成为新进程组的进程组组长, (c)没有控制终端 但是,当我执行命令“fg”后台进程在终端上进行控制。所以现在如果我使用setsid(),问题将会是如何将进程连接到另一个进程。 – adarsh