c - 为什么将 SIGTTOU 信号传递给进程?
问题描述
我试图构建一个在 ZSH shell 中运行的交互式 shell。任何命令都将在它自己的进程组中执行(因此我使用tcsetpgrp
call 使其成为前台进程组,一旦执行命令,交互式 shell 将成为前台进程组)。但是我观察到,在我的代码执行过程中,我收到了一个 SIGTTOU 信号,据我所知,当后台进程尝试写入终端时,会传递该信号。对于下面的示例,如果有人可以解释上述信号的原因,那将非常有帮助。
最小的可重现示例
#include <sys/types.h>
#include <termios.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
int main()
{
for(;;){
printf(">Network shell\n");
int par = getpid();
int child = fork();
if(child == 0){
int c2 = fork();
if(c2 == 0){
char * args[2];
args[0]="/bin/ls";
args[1] = NULL;
execv(args[0], args);
}
else{
wait(NULL);
tcsetpgrp(STDIN_FILENO, par); //done to bring previous process group back to foreground
tcsetpgrp(STDOUT_FILENO, par);
}
}
else{
setpgid(child, child);
tcsetpgrp(STDIN_FILENO, child);
tcsetpgrp(STDOUT_FILENO, child);
wait(NULL);
}
}
}
解决方案
您/bin/ls
对标准输出的写入,由于它的标准输出没有被重定向,它会写入终端。
推荐阅读
- python - Why is my page closing by itself when my program is finished?
- javascript - 无法加载 PDF 但可以看到数据
- linux - 使用 buildroot linux 从头开始构建 docker 映像
- javascript - 如何使用 Mongoose 将数据推送到 MongoDB 中的嵌套数组
- python - 正在制作一个 AI tic tac toe 机器人,但是当那里有一个值时,return 给出的输出为 none
- java - 反射而不是工厂模式?
- python - 在 Tkinter 中创建和使用变量
- r - 来自文本输入的表格中的R闪亮多行行
- r - 使用 ffdfdply() 汇总大量数据
- r - 在图表中编辑。相关函数 R