Commit 0deb464c authored by Kevin Burke's avatar Kevin Burke

unix: add Exec call

The syscall execve has no wrapper in this library, which it seems like
it should - Ian seemed to concur in CL 72550.

Add a docstring and an example, because I always get confused about
how to invoke the syscall.

Change-Id: I6100bbbf4ace9e3e341bf186a04cc03301da9aea
Reviewed-on: https://go-review.googlesource.com/101282Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 2f1e207e
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package unix
import (
"log"
"os"
"syscall"
)
func ExampleExec() {
err := syscall.Exec("/bin/ls", []string{"ls", "-al"}, os.Environ())
log.Fatal(err)
}
...@@ -305,3 +305,12 @@ func SetNonblock(fd int, nonblocking bool) (err error) { ...@@ -305,3 +305,12 @@ func SetNonblock(fd int, nonblocking bool) (err error) {
_, err = fcntl(fd, F_SETFL, flag) _, err = fcntl(fd, F_SETFL, flag)
return err return err
} }
// Exec calls execve(2), which replaces the calling executable in the process
// tree. argv0 should be the full path to an executable ("/bin/ls") and the
// executable name should also be the first argument in argv (["ls", "-l"]).
// envv are the environment variables that should be passed to the new
// process (["USER=go", "PWD=/tmp"]).
func Exec(argv0 string, argv []string, envv []string) error {
return syscall.Exec(argv0, argv, envv)
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment