首页 新闻 会员 周边

疑似popen阻塞的问题,求帮忙

0
悬赏园豆:10 [已解决问题] 解决于 2023-11-14 16:53

今天遇到一个问题:
程序阻塞住了,父进程A会调用popen执行shell命令并读取结果,现在在系统中存在两个A进程,其中一个是另一个的子进程,我在A调用popen前后打印日志,从日志看popen没有执行结束,阻塞在popen里面了,父进程处于Sleeping状态,子进程处于Running状态,其他完全一样,所以我怀疑是父程序A调用的popen函数,子进程A在fork和exec之间被阻塞了,导致目前这个情况,这个是我目前的猜测,没有方法验证,只有这么解释的通,有朋友遇到过这个情况的吗?
在线求助。

问题补充:

lingzshen的主页 lingzshen | 初学一级 | 园豆:193
提问于:2019-11-19 15:24
< >
分享
最佳答案
0

这么诡异,你popen怎么写的,看看

收获园豆:10
窗户 | 小虾三级 |园豆:886 | 2019-11-19 17:49

printf("\nwaiting...(thread id : %ld)\n", pthread_self());
pthread_mutex_lock(&mutex);
printf("\nenter.(thread id : %ld)\n", pthread_self());
FILE *cmd_fd = popen(cmd_str, "r");
if (cmd_fd) {
printf("\ncmd running....\n");
}
printf("\nexit.(thread id : %ld)\n", pthread_self());
pthread_mutex_unlock(&mutex);

lingzshen | 园豆:193 (初学一级) | 2019-11-20 09:13

@atomic_weapon:
popen将cmd_str命令的标准输出dup到管道,需要标准I/O来读取命令打印的信息,结束了之后用pclose关闭,而不是用fclose关闭。

窗户 | 园豆:886 (小虾三级) | 2019-11-20 10:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册