我有一个使用popen执行脚本的代码,它工作正常,但随机它阻塞并使CPU达到100%,经过一些调查我发现它挂在popen调用上。我在popen显示描述符后放了一个printf,在这种情况下阻止这个printf永远不会显示。
什么会导致popen阻止?
编辑:代码
FILE* pipe = popen(cpCommand, "r");
printf(....
if (pipe)
{
while (!feof(pipe))
{
if (DataReady(fileno(pipe),2500)>0)
{
if (fgets(output,sizeof(output),pipe) != NULL)
{
DataReady只是一个选择.. 我阻止它之后做了一个strace,似乎没有做任何事情
答案 0 :(得分:1)
不是答案; - )
尝试使用strace
来处理它正在做什么以及系统调用挂起。
Tminminal输出是行缓冲的,因此请确保使用fflush()或使用换行符(fflush(stdout);
或printf("Debug text\n");
)来刷新输出,以确保它不会真正调用printf()的
手动运行脚本,确保脚本在怀疑popen()之前不会间歇性地挂起。
答案 1 :(得分:0)
检查popen()
调用的脚本为什么不结束。
只要脚本没有结束,popen()
阻止,就会说:不会像往常一样返回。
我强烈怀疑这是一个C问题。