execveat(2)/ fexecve(3)类似于Python子进程的行为

g

如何获得Python的进程模块来接受fd而不是路径(带有=的execveat()AT_EMPTY_PATH)?例:

subprocess.Popen (["argv0", "argv1"], shell=False,
                  executable=os.open ("/proc/self/exe",
                                      os.O_RDONLY
                                      | os.O_CLOEXEC))

使用Python 3.6.5时,由于TypeError而失败。

当然,目标是避免在验证二进制文件和对execve(2)的调用之间避免使用TOCTTOU

我知道os.execve()也可以与fds一起使用,但是我不希望在此之上重新实现子流程模块。

最小最大平均

CPython是POSIX_posixsubprocess的内部实现subprocess,不支持fexecve(3)也不支持execveat(2)如果可以假定/proc已安装,则只需指定/proc/self/fd/N(其中N是所需的fd)作为可执行文件即可。这也是fexecve(3)旧内核的原因。有关proc(5)的详细信息,请参见Linux手册页/proc/self/fd

编辑示例:

def spawn_exefd(args, fd, bufsize=-1, *args, **kwargs):
    return subprocess.Popen(args, bufsize, "/proc/self/fd/%d" % (fd,), *args, **kwargs)

#import fcntl # py2
import os
fd = os.open("/bin/sh", os.O_RDONLY | os.O_CLOEXEC)
#fcntl.fcntl(fd, fcntl.F_SETFD, fcntl.fcntl(fd, fcntl.F_GETFD) | fcntl.FD_CLOEXEC) # py2
spawn_exefd(["sh", "-i"], fd)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

tofixed()+ 2的行为类似于tofixed +“ 2”

Angular 2:Toggle子菜单(类似于jQuery slideToggle)

使2列div布局的行为类似于2列表布局

使 Python 2D 掩码数组类似于 MATLAB

是否有类似于Python的urllib2的库?

如何在Python 3.x中获得类似2.x的排序行为?

C#实现类,其行为类似于2dim数组

使用Python子进程时,为什么Ctrl-C不会产生与kill -2相同的行为?

适用于Python 2但不适用于Python 3的Python子进程PIPE

子进程python filenotfounderror:[winerror 2]

使用ggplot2创建类似于d3.js强制布局的气泡图

在Ubuntu上运行的类似于“ universal-usb-installer-easy-as-1-2-3”的软件?

如何终止类似于ctrl-c的python进程?

返回字典时,python的行为类似于JavaScript吗?

如何设计行为类似于根类的python类

python类的行为类似于字典或列表数据

从Angular2的子组件切换父组件中的属性(类似于AngularJS中的$ emit)

行为类似于 OpenFileDialog 的 OpenDatabaseForm

CSS Div,子级的行为类似于表格,使一个子级填充宽度

Python子图中的范围类似于MATLAB的stackedplot()

循环以创建字典D,其外观类似于:{1:100,2:99,3:98,…,100:1}

类似于“this”的子窗口的东西

python2中的子进程返回错误

Python 2子进程:无法从readline获取输出

往返于2个Python子进程的循环管道

Python子进程ping -h返回退出状态2

在Python中绘制线性图和对数图。类似于R中的mfrow = c(2,1)

CSS“子”选择器的行为类似于“后代”选择器

<c:when>的行为是否类似于“ else if”或“ if”?