1// Copyright 2009 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5// Process etc. 6 7package os 8 9import ( 10 "internal/testlog" 11 "runtime" 12 "syscall" 13) 14 15// Args hold the command-line arguments, starting with the program name. 16var Args []string 17 18func init() { 19 if runtime.GOOS == "windows" { 20 // Initialized in exec_windows.go. 21 return 22 } 23 Args = runtime_args() 24} 25 26func runtime_args() []string // in package runtime 27 28// Getuid returns the numeric user id of the caller. 29// 30// On Windows, it returns -1. 31func Getuid() int { return syscall.Getuid() } 32 33// Geteuid returns the numeric effective user id of the caller. 34// 35// On Windows, it returns -1. 36func Geteuid() int { return syscall.Geteuid() } 37 38// Getgid returns the numeric group id of the caller. 39// 40// On Windows, it returns -1. 41func Getgid() int { return syscall.Getgid() } 42 43// Getegid returns the numeric effective group id of the caller. 44// 45// On Windows, it returns -1. 46func Getegid() int { return syscall.Getegid() } 47 48// Getgroups returns a list of the numeric ids of groups that the caller belongs to. 49// 50// On Windows, it returns [syscall.EWINDOWS]. See the [os/user] package 51// for a possible alternative. 52func Getgroups() ([]int, error) { 53 gids, e := syscall.Getgroups() 54 return gids, NewSyscallError("getgroups", e) 55} 56 57// Exit causes the current program to exit with the given status code. 58// Conventionally, code zero indicates success, non-zero an error. 59// The program terminates immediately; deferred functions are not run. 60// 61// For portability, the status code should be in the range [0, 125]. 62func Exit(code int) { 63 if code == 0 && testlog.PanicOnExit0() { 64 // We were told to panic on calls to os.Exit(0). 65 // This is used to fail tests that make an early 66 // unexpected call to os.Exit(0). 67 panic("unexpected call to os.Exit(0) during test") 68 } 69 70 // Inform the runtime that os.Exit is being called. If -race is 71 // enabled, this will give race detector a chance to fail the 72 // program (racy programs do not have the right to finish 73 // successfully). If coverage is enabled, then this call will 74 // enable us to write out a coverage data file. 75 runtime_beforeExit(code) 76 77 syscall.Exit(code) 78} 79 80func runtime_beforeExit(exitCode int) // implemented in runtime 81