ipython / ipython/ipython

fd leak after embed

未关闭
#11,753 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
Python
星标
16.8k
派生
4.5k
平均合并
1 天 2 小时
30 天内合并 PR
6

描述

It seems like `IPython.embed` is not correctly restoring file descriptors after it exits.

Example script:
```python
import os, subprocess

def print_fd(pid=None):
if pid is None:
pid = os.getpid()
print('\npid = {}'.format(pid))
subprocess.call('ls -la /proc/{}/fd'.format(pid), shell=True)
print()

def main():
print('\nBefore')
print_fd()
from IPython import embed; embed()
print('\nAfter')
print_fd()

if __name__ == '__main__':
main()
```

Output
```console
$ python3 lala.py

Before

pid = 42928
total 0
dr-x------ 2 me me 0 May 27 22:09 .
dr-xr-xr-x 9 me me 0 May 27 22:09 ..
lrwx------ 1 me me 64 May 27 22:09 0 -> /dev/pts/2
lrwx------ 1 me me 64 May 27 22:09 1 -> /dev/pts/2
lrwx------ 1 me me 64 May 27 22:09 2 -> /dev/pts/2

Python 3.6.4 (default, Jan 24 2019, 05:49:39)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:
Do you really want to exit ([y]/n)?

After

pid = 42928
total 0
dr-x------ 2 me me 0 May 27 22:09 .
dr-xr-xr-x 9 me me 0 May 27 22:09 ..
lrwx------ 1 me me 64 May 27 22:09 0 -> /dev/pts/2
lrwx------ 1 me me 64 May 27 22:09 1 -> /dev/pts/2
l-wx------ 1 me me 64 May 27 22:09 10 -> pipe:[2804779437]
lrwx------ 1 me me 64 May 27 22:09 2 -> /dev/pts/2
l-wx------ 1 me me 64 May 27 22:09 3 -> /dev/null
lrwx------ 1 me me 64 May 27 22:09 4 -> /home/me/.ipython/profile_default/history.sqlite
lrwx------ 1 me me 64 May 27 22:09 5 -> /home/me/.ipython/profile_default/history.sqlite
lrwx------ 1 me me 64 May 27 22:09 6 -> anon_inode:[eventpoll]
lr-x------ 1 me me 64 May 27 22:09 7 -> pipe:[2804779436]
l-wx------ 1 me me 64 May 27 22:09 8 -> pipe:[2804779436]
lr-x------ 1 me me 64 May 27 22:09 9 -> pipe:[2804779437]
```

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。