去fork/exec权限被拒绝错误

use*_*049 10 go

我最近使用CentOS 6.3安装了Go到我们的服务器上.安装似乎没有问题.但是我做了一个测试"hello world"脚本,当我运行时,我得到以下输出.

fork/exec /tmp/go-build967564990/command-line-arguments/_obj/a.out: permission denied
Run Code Online (Sandbox Code Playgroud)

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

zzz*_*zzz 13

猜测:你的nix可能因为安全原因而在/ tmp中执行程序时禁用.它可能在CentOS中可配置,但我不知道.

替代解决方案:您似乎正在尝试go run执行Go程序(这是脚本,因为C是脚本).尝试(假设$GOPATH=~,简单的可能性)而不是正常的构建,即代替

me:~/src/foo$ go run main.go
Run Code Online (Sandbox Code Playgroud)

尝试

me:~/src/foo$ go build # main.go should not be necessary here
me:~/src/foo$ ./foo
Run Code Online (Sandbox Code Playgroud)

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

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

  • @ user387049,看起来像jnml是正确的:尝试运行`mount`并查看`/ tmp`的输出是否提到`noexec`选项. (2认同)

Win*_*ter 12

我今天遇到了这个问题,但上面的解决方案没有用.通过简单运行来解决我的问题:

$ export TMPDIR=~/tmp/
Run Code Online (Sandbox Code Playgroud)

然后我能够让脚本运行:

$ go run hello.go
hello, world
Run Code Online (Sandbox Code Playgroud)

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

感谢Adam Goforth

  • 如果想避免影响其他程序,可以 `alias go='TMPDIR=~/tmp go'` (3认同)