cmd.StdoutPipe
即时文档示例:https://pkg.go.dev/os/exec#example-Cmd.StdoutPipe不在操场上运行。
https://play.golang.org/p/ek7-_Xa_bN3
错误:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [IO wait]:
internal/poll.runtime_pollWait(0x7faec2ac4e88, 0x72)
/usr/local/go-faketime/src/runtime/netpoll.go:234 +0x89
internal/poll.(*pollDesc).wait(0xc000074180, 0xc000100000, 0x1)
/usr/local/go-faketime/src/internal/poll/fd_poll_runtime.go:84 +0x32
internal/poll.(*pollDesc).waitRead(...)
/usr/local/go-faketime/src/internal/poll/fd_poll_runtime.go:89
internal/poll.(*FD).Read(0xc000074180, {0xc000100000, 0x200, 0x200})
/usr/local/go-faketime/src/internal/poll/fd_unix.go:167 +0x25a
os.(*File).read(...)
/usr/local/go-faketime/src/os/file_posix.go:32
os.(*File).Read(0xc00000e028, {0xc000100000, 0x28, 0xc000060e80})
/usr/local/go-faketime/src/os/file.go:119 +0x5e
encoding/json.(*Decoder).refill(0xc00007e000)
/usr/local/go-faketime/src/encoding/json/stream.go:165 +0x17f
encoding/json.(*Decoder).readValue(0xc00007e000)
/usr/local/go-faketime/src/encoding/json/stream.go:140 +0xbb
encoding/json.(*Decoder).Decode(0xc00007e000, {0x4cf580, 0xc00000c048})
/usr/local/go-faketime/src/encoding/json/stream.go:63 +0x78
main.main()
/tmp/sandbox2294589397/prog.go:24 +0x185
Program exited.
在本地,它运行正常,没有死锁。我不明白为什么围棋场会出现僵局。
来自os.exec
包的文档(这就是本示例的来源(:
请注意,此包中的示例假定为Unix系统。他们可能不在Windows上运行,并且它们不在golang.org和godoc.org.
该注释没有提供原因,但原因可能是允许用户提供的unix命令运行会为恶意代码提供更广泛的攻击面。这并不是说不可能以一种相对安全的方式允许这样做,但有各种权衡使得不允许os.exec
成为一种自然的选择。