gopkg.in/essentialkaos/ek.v3@v3.5.1/system/setprocname.go (about)

     1  // +build linux, darwin
     2  
     3  package system
     4  
     5  // ////////////////////////////////////////////////////////////////////////////////// //
     6  //                                                                                    //
     7  //                     Copyright (c) 2009-2016 Essential Kaos                         //
     8  //      Essential Kaos Open Source License <http://essentialkaos.com/ekol?en>         //
     9  //                                                                                    //
    10  // ////////////////////////////////////////////////////////////////////////////////// //
    11  
    12  import (
    13  	"os"
    14  	"reflect"
    15  	"unsafe"
    16  )
    17  
    18  // ////////////////////////////////////////////////////////////////////////////////// //
    19  
    20  // SetProcName change current process name
    21  // New process name must have same length or less.
    22  func SetProcName(name string) {
    23  	titleStr := (*reflect.StringHeader)(unsafe.Pointer(&os.Args[0]))
    24  	title := (*[1 << 30]byte)(unsafe.Pointer(titleStr.Data))[:titleStr.Len]
    25  
    26  	newTitle := name
    27  	curTitle := os.Args[0]
    28  
    29  	if len(curTitle) > len(newTitle) {
    30  		spaces := "                                                                "
    31  		newTitle += spaces[:len(curTitle)-len(newTitle)]
    32  	}
    33  
    34  	n := copy(title, newTitle)
    35  	if n < len(title) {
    36  		title[n] = 0
    37  	}
    38  }