如何将子进程在后台运行到前台

时间:2011-04-26 04:36:55

标签: c++ linux process fork execv

如果我使用fork()和execv()来生成在后台运行的几个子进程,我想将其中一个带到前台,我该怎么做?

我正在尝试编写一个可以在前台或后台启动进程的shell。

3 个答案:

答案 0 :(得分:4)

“背景”和“前景”不是通常用于流程的术语,而是仅适用于可以按需等待作业的shell。

答案 1 :(得分:4)

Ignacio Vazquez-Abram's answer互补,我建议您模拟shell前景/背景模型。

据我所知,后台处理意味着暂停它。最简单的方法是通过SIGSTOP。前景处理时,请将其发送给SIGCONT。只要您的“工作”中只有一个当前处于前台,它就是唯一一个读取和写入会话tty的人。

kill(child_pid, SIGSTOP);
kill(child_pid, SIGCONT);

您可能希望在fork之后和execv之前暂停每个进程,并为shell的用户提供以后保留不变量的选项。

if (!fork()) { // we are the child
    raise(SIGSTOP); // suspend self
    execv(...); // run the command (after we've been resumed)

以下是我发现的一些相关链接:

答案 2 :(得分:1)

你可以使用fg将进程带到前台,然后使用bg将进程放到后台。你应该知道将它带到前台的过程的pid。请参阅fg和bg的linux手册以获取更多信息