Golangの標準ライブラリだと、プロセスIDは取得できるみたいなのだけど、どうもプロセス名は取ってこれないらしい。 で、なんかいい方法ないかなと調べてたところ、『go-ps』というライブラリを見つけた。 これなら、プロセス名も取ってこれそうだ。

以下、実際にいじってみた際のコード。FindProcessの使い方は、基本的にはos.FindProcessとあまり変わらないみたいだ。

package main

import (
    "fmt"
    "os"

    "github.com/mitchellh/go-ps"
)

func main() {
    pid := os.Getpid()

    pidInfo, _ := ps.FindProcess(pid)

    fmt.Println(pidInfo)
    fmt.Printf(" PID          : %d\n", pidInfo.Pid())
    fmt.Printf(" PPID         : %d\n", pidInfo.PPid())
    fmt.Printf(" Process name : %s\n", pidInfo.Executable())

    ppidInfo, _ := ps.FindProcess(pidInfo.PPid())
    fmt.Println("\n=================")
    fmt.Printf(" Parent process name : %s\n", ppidInfo.Executable())
}

実際に実行してみた結果がこちら。

[blacknon@blacknon-ThinkPad-X201]% ~(`・ω・´)  < ./test-ps
&{12007 16050 82 12007 16050 test-ps}
 PID          : 12007
 PPID         : 16050
 Process name : test-ps

=================

 Parent process name : zsh