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



我有一个使用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,它似乎什么都没做

不是答案;-)

  1. 尝试将strace用于它正在执行的操作以及挂起的系统调用。

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

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

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

只要脚本没有结束,popen()块,就会说:不返回,正如观察到的那样。


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

最新更新