popen挂起并导致CPU使用率达到100

时间:2013-12-12 11:17:15

标签: c++ c

我有一个使用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,似乎没有做任何事情

2 个答案:

答案 0 :(得分:1)

不是答案; - )

  1. 尝试使用strace来处理它正在做什么以及系统调用挂起。

  2. Tminminal输出是行缓冲的,因此请确保使用fflush()或使用换行符(fflush(stdout);printf("Debug text\n");)来刷新输出,以确保它不会真正调用printf()的

  3. 手动运行脚本,确保脚本在怀疑popen()之前不会间歇性地挂起。

答案 1 :(得分:0)

检查popen()调用的脚本为什么不结束。

只要脚本没有结束,popen()阻止,就会说:不会像往常一样返回。


我强烈怀疑这是一个C问题。