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 "runtime" 11 "syscall" 12) 13 14// Args hold the command-line arguments, starting with the program name. 15var Args []string 16 17func init() { 18 if runtime.GOOS == "windows" { 19 // Initialized in exec_windows.go. 20 return 21 } 22 Args = runtime_args() 23} 24 25func runtime_args() []string // in package runtime 26 27// Getuid returns the numeric user id of the caller. 28func Getuid() int { return syscall.Getuid() } 29 30// Geteuid returns the numeric effective user id of the caller. 31func Geteuid() int { return syscall.Geteuid() } 32 33// Getgid returns the numeric group id of the caller. 34func Getgid() int { return syscall.Getgid() } 35 36// Getegid returns the numeric effective group id of the caller. 37func Getegid() int { return syscall.Getegid() } 38 39// Getgroups returns a list of the numeric ids of groups that the caller belongs to. 40func Getgroups() ([]int, error) { 41 gids, e := syscall.Getgroups() 42 return gids, NewSyscallError("getgroups", e) 43} 44 45// Exit causes the current program to exit with the given status code. 46// Conventionally, code zero indicates success, non-zero an error. 47// The program terminates immediately; deferred functions are not run. 48func Exit(code int) { 49 if code == 0 { 50 // Give race detector a chance to fail the program. 51 // Racy programs do not have the right to finish successfully. 52 runtime_beforeExit() 53 } 54 syscall.Exit(code) 55} 56 57func runtime_beforeExit() // implemented in runtime 58