【发布时间】:2010-09-28 19:49:15
【问题描述】:
在 Linux 中,readline() 在无限循环中重复读取 文本\n。然而,一旦子进程开始打印到屏幕上,readline 就不再读取新行。即使我反复按回车,readline() 也不会返回。
有人知道怎么回事吗?
根据要求提供代码示例:
char* input;
int cpid;
while(1)
{
input = readline(">>>");
strcpy(tempInput, input); //...does some stuff w/ tempInput
//....
cpid = fork();
if(cpid == 0){
printf("..."); printf("...");
execl("ls", "ls", "-l", (char*) NULL); //sample execl parameters
}
else{
//do some stuff...
printf("...");
}
free(input);
}
//readline(">>>") works the first time and doesn't return on subsequent calls
代码挂起位置的堆栈跟踪(永远):
Thread [1] (Suspended : Signal : SIGINT:Interrupt)
__read_nocancel() at ../sysdeps/unix/syscall-template.S:82 0x7ffff78f0490
rl_getc() at 0x7ffff7bc3727
rl_read_key() at 0x7ffff7bc3c90
readline_internal_char() at 0x7ffff7baf25f
readline() at 0x7ffff7baf795
main() at /home/.../.../xxx.c:95 0x4010a1
编辑:对于经验丰富的 unix 开发人员来说,这可能听起来像是完全的技术问题,但是子进程是否可能以某种方式“捕获”了标准输入并且无法以某种方式释放它?
【问题讨论】:
-
能否提供代码示例?
-
分叉后你没有任何对
readline的调用。 -
孩子什么都没读(只是添加了一些显示 exec 调用的代码)。