You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

sudo+fork+Python subprocess触发[Errno 38] Function not implemented错误的排查求助

sudo+fork+Python subprocess触发[Errno 38] Function not implemented错误的排查求助

我遇到了一个特别诡异的问题,折腾了半天没理清原因,来求助大家!先给大家看一段简化后的Python脚本(我把它存为app.py),逻辑很简单:fork一个子进程,然后在这个子进程里调用subprocess.run执行另一个命令:

import os
import subprocess

if os.fork() > 0:
    os._exit(0)

subprocess.run(["/bin/true"])

下面是几种不同运行方式的结果:

正常运行的场景

  • 以普通用户身份运行完全没问题:
$ python3 app.py
$ echo $?
0
  • 先通过sudo bash进入root shell,再运行脚本也一切正常:
$ sudo bash
# python3 app.py
#

异常失败的场景

但是当我直接用sudo来运行这个脚本时,就会出现匪夷所思的报错:

$ sudo python3 app.py
$ Traceback (most recent call last):
  File "/tmp/app.py", line 7, in <module>
    subprocess.run(["/bin/true"])
  File "/usr/lib/python3.11/subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.11/subprocess.py", line 1955, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
OSError: [Errno 38] Function not implemented: '/bin/true'

还有另一种类似的异常情况:先进入sudo shell,再用exec替换当前进程运行脚本,同样会触发相同的报错:

$ sudo bash
# exec python3 app.py
$ Traceback ... (same error message as above)

我实在搞不懂,为什么subprocess.run创建的子进程会触发ENOSYS(函数未实现)的错误,而且只有当父进程是直接通过sudo启动的时候才会出现这种问题?

更新补充

我使用的系统是TrueNAS SCALE(基于Debian的Linux发行版),Python版本为3.11.9。之后我在另一台普通Linux系统上测试了相同的脚本,没有复现这个问题,所以现在我怀疑这可能和sudo的配置或者内核的安全限制选项有关,但还不确定具体是哪部分导致的。

备注:内容来源于stack exchange,提问作者ab.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:04:32