【发布时间】:2011-07-17 12:10:30
【问题描述】:
我正在尝试为子进程(通过fork())提供对终端的前台访问权限。
我fork()之后,在子进程中运行如下代码:
setpgid(0, 0);
还有:
setpgid(child, child);
在父进程中。
这为子进程提供了自己的进程组。对setpgid() 的调用工作正常。
现在我想让孩子访问终端。
我在setpgid() 调用后向孩子添加了以下内容:
if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}
之后,有一个execv() 命令生成/usr/bin/nano。
但是,没有出现nano,而是什么都没有发生,终端看起来好像在等待用户输入。
此外,tcsetpgrp() 调用之后似乎没有代码执行。
我在某处读到我需要向子进程发送SIGCONT 信号以使其工作。如果该过程停止,我该怎么做?父母必须发送信号吗?
如果这是解决方案,我该如何发送SIGCONT 信号?
raise(SIGCONT);
另外,我不确定这是否有帮助,但如果我运行我的程序,代码可以正常工作并产生 nano:
exec ./program
代替:
./program
有什么想法吗?非常感谢!
【问题讨论】:
-
会话负责人(阅读:shell)应该调用 tcsetpgrp()
标签: c process signals jobs foreground