毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

数据采集箱system函数容易阻塞

更新时间:2015-12-26:  来源:毕业论文

做了一个数据采集箱的项目。在调试过程中发现system函数容易出现阻塞,导致线程一直阻塞住。后来我单独写了一个main函数,来测试system函数。结果发现,system函数运行几十次到几千次后就可能会出现阻塞的情况。当时很费解,就自己实现了一个system函数(通过fork + execl 函数 实现),结果发现一样会出现阻塞的情况,后来跟踪后发现,问题出在fork函数。

按说调用fork 函数会返回两次,分别返回父进程 和 子进程。我出现的情况是,父进程正常返回子进程的pid号,但是子进程没有返回。fork函数只返回了一次。 然后父进程就阻塞在waitpid这个函数这里了。通过ps命令,可以看到子进程是已经建立了,kill 子进程的pid后,waitpid函数可以返回了。

我感觉像是fork函数出问题了,但是fork函数自己没法实现。

系统内核是2.6.24.
板子是arm平台的,主控是his3515.

这个问题到现在还困扰着我。后来实在没办法,我就结合alarm函数来处理了,用自己重写的system函数,执行的时候,同时设定好alarm的超时时间,由超时函数处理,时间超过了预设的超时时间,就把子进程的pid杀掉,再重新执行。毕竟出现连续阻塞的概率还是很低的。

现在这样虽然系统能够正常运行了,但终究觉得不怎么好,想弄明白到底什么原因导致的这个问题。
没有遇到过这样问题system这个系统调用本身开销就比较大,试试popen函数试试

问题就在于fork本身,如果你linux内核中vfork不是fork实现的,可以考虑自己用vfork写exec试试,也可以试试我上面说的堵塞SIGCHLD,如果你不在意system的返回值

用HI3521,同样遇到了这样的问题,请问楼主,你的问题解决没有,system调用,ps子进程已经运行,但主进程一直阻塞无法退出

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。