的目标考虑下面的源,减小为简单起见“多个”管道命令中断的bash
int main()
{
int d[2];
pipe(d);
if(fork())
{
close(1);
dup(d[1]);
execlp("ls", "ls", NULL);
}
else
{
close(0);
dup(d[0]);
execlp("cat", "cat", NULL);
}
}
所以它创建一个管道和输出从ls
到cat
重定向。
它工作得很好,没有问题。但改变cat
为more
和bash休息。
的症状是:
- 你没有看到任何你键入
- 按“ENTER”显示了一个新的提示,而不是在一个新的生产线,但在同一个
- 你可以执行任何命令并看到输出
reset
有助于解决问题。
因此,键盘输入存在问题,它在那里,但不可见。
这是为什么?
UPDATE:
- 从
ls | more
输出相当于我的程序的输出 more
过程没有完成,它是由ls
- 唯一可见的问题,孤儿是状态父进程退出后的控制台在某些系统上退出
- 它确实按预期工作。例如,在OpenSUSE上,我在Kubuntu上没有问题。我找不到,我应该寻找什么区别的任何信息,
more
二进制文件是在两个系统上
它在我的系统上正常工作,具有'more' .. – Omkant
有趣。在我的其他系统上它也可以工作。所以它适用于OpenSUSE,但不适用于Kubuntu。这更糟糕:/ –
立即更新。 –