【发布时间】:2012-11-10 16:55:02
【问题描述】:
考虑以下来源,为简单起见减少
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帮助解决问题。
所以键盘输入有问题,它在那里,但不可见。
这是为什么呢?
更新:
-
ls | more的输出相当于我的程序的输出 -
more进程没有完成,它被ls孤立了 - 唯一可见的问题是父进程退出后控制台的状态
- 在某些系统上,它确实按预期工作。例如,在 OpenSUSE 上我没有问题,在 Kubuntu 上。我找不到任何关于我应该寻找哪些差异的信息,
more二进制文件在两个系统上都不同
【问题讨论】:
-
它在我的系统上运行良好
more.. -
有趣。在我的另一个系统上它也可以工作。所以它适用于 OpenSUSE,但不适用于 Kubuntu。那更令人迷惑:/