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