实现unix终端后台进程。

时间:2013-01-16 02:52:11

标签: background-process shellexecute

我在c中编写自己的shell,问题在于后台进程的实现。 现在我们在BASH上执行一个以'&'结尾的流程那个过程就在后台 并开始执行,后台进程的输出来自终端,当后台进程需要输入时,它被暂停,直到我们给出“fg”命令。

那么如何实现后台进程?

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

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

1 个答案:

答案 0 :(得分:0)

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

 sid = setsid();

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