gpt4 book ai didi

c - 如何让 tcsetpgrp() 在 C 中工作?

转载 作者:太空狗 更新时间:2023-10-29 16:40:50 25 4
gpt4 key购买 nike

我正在尝试为子进程(通过 fork())提供对终端的前台访问权限。

在我fork() 之后,我在子进程中运行以下代码:

setpgid(0, 0);

和:

setpgid(child, child);

在父进程中。

这为子进程提供了自己的进程组。对 setpgid() 的调用工作正常。

现在我想给 child 访问终端。

我在 setpgid() 调用后向 child 添加了以下内容:

if (!tcsetpgrp(STDIN_FILENO, getpid())) {
perror("tcsetpgrp failed");
}

之后,有一个 execv() 命令生成 /usr/bin/nano

但是,nano 并没有出现,什么也没有发生,终端看起来好像在等待用户输入。

此外,在 tcsetpgrp() 调用之后似乎没有代码执行。

我在某处读到我需要向子进程发送 SIGCONT 信号以使其工作。如果进程停止,我该怎么做? parent 必须发送信号吗?

如果这是解决方案,我该如何发送 SIGCONT 信号?

raise(SIGCONT);

此外,我不确定这是否有帮助,但如果我运行我的程序,代码可以正常工作并生成 nano:

exec ./program

代替:

./program

有什么想法吗?非常感谢!

最佳答案

想通了。我必须忽略任何 SIGTTOU 信号。

我通过添加:

signal(SIGTTOU, SIG_IGN);

tcsetpgrp() 调用之前。

关于c - 如何让 tcsetpgrp() 在 C 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5341220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com