15

我最近使用 CentOS 6.3 在我们的服务器上安装了 Go。安装似乎很顺利。但是,我制作了一个测试“hello world”脚本,当我运行时,我得到以下输出。

fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied

现在运行 go env 或其他 go 命令似乎可以工作。起初我认为这是一个权限问题,但是以 root 用户身份运行我得到了同样的结果。一个

4

6 回答 6

19

我今天遇到了这个问题,但上面的解决方案不起作用。我通过简单地运行来修复:

$ export TMPDIR=~/tmp/

然后我能够让脚本运行:

$ go run hello.go
hello, world

唯一的缺点是export TMPDIR每次要运行应用程序时都必须运行。

亚当·戈福斯致敬

于 2014-10-22T18:20:47.790 回答
15

只是猜测:出于安全原因,您的 nix 可能会禁用在 /tmp 中执行程序。它可能在 CentOS 中是可配置的,但我不知道。

另一种解决方案:您似乎正在尝试go run执行 Go 程序(它就像 C 是脚本一样的脚本)。尝试(假设$GOPATH=~,简单的可能性)而不是正常的构建,即而不是

me:~/src/foo$ go run main.go

尝试

me:~/src/foo$ go build # main.go should not be necessary here
me:~/src/foo$ ./foo

这种方法仍将使用 /tmp-whatever 创建二进制文件 IIRC,但它不会尝试从那里执行它。

PS:不要以root身份运行这些命令。无需正确设置。

于 2013-02-18T19:48:48.303 回答
1

我正在使用 Fedora 31 并遇到了类似的错误,导致我来到这里。我无法运行 Jetbrains IntelliJ Ultimate/GoLand 使用的 Go 调试器而没有出现fork/exec&permission denied错误。解决方案是这样的:

setsebool deny_ptrace 0

有关详细信息,请参阅https://fedoraproject.org/wiki/Features/SELinuxDenyPtrace

于 2020-03-03T09:01:19.277 回答
0

为了在我的 Chromebook 上解决这个问题,我刚刚重新安装/tmp为可执行文件。这样做可能会带来安全隐患,但由于go run可以在其他平台上工作,我认为这可能还不错(尤其是在本地开发机器上):

sudo mount -i -o remount,exec /tmp/

我将此添加到我的.bash_profile脚本中。

于 2016-05-29T10:25:46.073 回答
0

exec.Command 返回这个结构:输入 Cmd

标准评论:</p>

// Dir specifies the working directory of the command.  
// If Dir is the empty string, Run runs the command in the
// calling process's current directory.
Dir string

所以解决,您可以将 exec cmd 的路径传递给 exec 自己的命令:

cmd := exec.Command(xxxxx)
cmd.Dir = xxxxPath

然后你可以调用 Run() 或其他 Output() 函数

于 2021-11-17T06:36:42.087 回答
-4

考虑尝试:

sudo mount -o remount exec /tmp
于 2013-07-13T23:55:27.713 回答