execve因参数错误而失败



我想用交互式Bash shell替换我的程序。在Golang(使用os/exec.Command(和Python(os.system(中启动是可行的,但当我想用syscall.Exec()os.execve()替换进程时就不行了。

演示Python代码:

import os
# first try with fork: OK
os.system("/bin/bash --rcfile env.sh -i")
# second try with execve: FAIL (exit after reading env.sh)
os.execve("/bin/bash", ["--rcfile", "env.sh", "-i"], os.environ)

env.sh:的内容

export PS1='interactive shell $ '
echo inside env.sh
ls -la /proc/self/fd

Python输出:

$ echo "Start: $$"; python test.py; echo "End: $$";
Start: 684875
inside env.sh
total 0
lrwx------ 1 willem willem 64 mrt 31 14:03 0 -> /dev/pts/1
lrwx------ 1 willem willem 64 mrt 31 14:03 1 -> /dev/pts/1
lrwx------ 1 willem willem 64 mrt 31 14:03 2 -> /dev/pts/1
lr-x------ 1 willem willem 64 mrt 31 14:03 3 -> /proc/737221/fd
interactive shell $ exit <--- Control-D from me
inside env.sh
total 0
lrwx------ 1 willem willem 64 mrt 31 14:03 0 -> /dev/pts/1
lrwx------ 1 willem willem 64 mrt 31 14:03 1 -> /dev/pts/1
lrwx------ 1 willem willem 64 mrt 31 14:03 2 -> /dev/pts/1
lr-x------ 1 willem willem 64 mrt 31 14:03 3 -> /proc/737223/fd
End: 684875

知道如何调试为什么Bash会在第二次运行时退出吗?

它是execve("/bin/bash", ["/bin/bash", "--rcfile", ...])

您正在运行bash env.sh -i—执行脚本env.sh,其中有一个参数-i,进程名称设置为--rcfile

相关内容

  • 没有找到相关文章

最新更新