使用PIPE从主进程读取子进程的stdout,导致子进程死亡。

我有一个简单的代码。

proc = subprocess.Popen(["/home/root/cc6ul/./IQ-sampler", str(self.num_files), str(self.n), self.results_directory, self.device_id, self.rid, self.cc6ul_state_filepath], stdout=subprocess.PIPE)

while proc.poll() is None:
    line = proc.stdout.readline()
    self.log.info("line:{}".format(line))

这导致我的IQ -采样器进程在时间之前死亡。但如果我直接从终端运行它,它就没有问题。我试着调试了一下,但我不明白根本原因。是通信PIPE的问题吗?因为这是我能看到的2个进程之间的唯一连接。

解决方案:

经过大量的调试,问题似乎出在IQ-sampler linux C语言的定时器回调上,它使用的是SIGEV_THREAD线程通知。将定时器回调加入到关键部分使用锁,似乎解决了这个问题。

有趣的是,只有当其他进程(这里是主python进程)运行时,IQ-sampler才会死亡,这让我认为CPU的负载可能加剧了并发问题。

给TA打赏
共{{data.count}}人
人已打赏
未分类

标题工具提示间距问题

2022-9-8 15:57:25

未分类

Eloquent - $fillable到底有什么用?

2022-9-8 16:08:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索