| // Copyright 2009 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. |
| |
| // Process etc. |
| |
| package os |
| |
| import ( |
| "internal/testlog" |
| "runtime" |
| "syscall" |
| ) |
| |
| // Args hold the command-line arguments, starting with the program name. |
| var Args []string |
| |
| func init() { |
| if runtime.GOOS == "windows" { |
| // Initialized in exec_windows.go. |
| return |
| } |
| Args = runtime_args() |
| } |
| |
| func runtime_args() []string // in package runtime |
| |
| // Getuid returns the numeric user id of the caller. |
| // |
| // On Windows, it returns -1. |
| func Getuid() int { return syscall.Getuid() } |
| |
| // Geteuid returns the numeric effective user id of the caller. |
| // |
| // On Windows, it returns -1. |
| func Geteuid() int { return syscall.Geteuid() } |
| |
| // Getgid returns the numeric group id of the caller. |
| // |
| // On Windows, it returns -1. |
| func Getgid() int { return syscall.Getgid() } |
| |
| // Getegid returns the numeric effective group id of the caller. |
| // |
| // On Windows, it returns -1. |
| func Getegid() int { return syscall.Getegid() } |
| |
| // Getgroups returns a list of the numeric ids of groups that the caller belongs to. |
| // |
| // On Windows, it returns [syscall.EWINDOWS]. See the [os/user] package |
| // for a possible alternative. |
| func Getgroups() ([]int, error) { |
| gids, e := syscall.Getgroups() |
| return gids, NewSyscallError("getgroups", e) |
| } |
| |
| // Exit causes the current program to exit with the given status code. |
| // Conventionally, code zero indicates success, non-zero an error. |
| // The program terminates immediately; deferred functions are not run. |
| // |
| // For portability, the status code should be in the range [0, 125]. |
| func Exit(code int) { |
| if code == 0 && testlog.PanicOnExit0() { |
| // We were told to panic on calls to os.Exit(0). |
| // This is used to fail tests that make an early |
| // unexpected call to os.Exit(0). |
| panic("unexpected call to os.Exit(0) during test") |
| } |
| |
| // Inform the runtime that os.Exit is being called. If -race is |
| // enabled, this will give race detector a chance to fail the |
| // program (racy programs do not have the right to finish |
| // successfully). If coverage is enabled, then this call will |
| // enable us to write out a coverage data file. |
| runtime_beforeExit(code) |
| |
| syscall.Exit(code) |
| } |
| |
| func runtime_beforeExit(exitCode int) // implemented in runtime |