1// Copyright 2012 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// +build !go1.8,android !go1.8,linux !go1.8,netbsd !go1.8,solaris !go1.8,dragonfly 6 7package osext 8 9import ( 10 "errors" 11 "fmt" 12 "os" 13 "runtime" 14 "strings" 15) 16 17func executable() (string, error) { 18 switch runtime.GOOS { 19 case "linux", "android": 20 const deletedTag = " (deleted)" 21 execpath, err := os.Readlink("/proc/self/exe") 22 if err != nil { 23 return execpath, err 24 } 25 execpath = strings.TrimSuffix(execpath, deletedTag) 26 execpath = strings.TrimPrefix(execpath, deletedTag) 27 return execpath, nil 28 case "netbsd": 29 return os.Readlink("/proc/curproc/exe") 30 case "dragonfly": 31 return os.Readlink("/proc/curproc/file") 32 case "solaris": 33 return os.Readlink(fmt.Sprintf("/proc/%d/path/a.out", os.Getpid())) 34 } 35 return "", errors.New("ExecPath not implemented for " + runtime.GOOS) 36} 37