Windows上のプロセスの存在チェックをしたい場合のサンプルコードです。
前回記事のgo-ps
を利用すれば十分にチェック可能だと思いますが、今回のサンプルでは tasklist.exe
に思いっきり頼っています。
package main import ( "bytes" "fmt" "os" "os/exec" "syscall" ) func main() { if len(os.Args) < 2 { fmt.Printf("Parameter invalid") os.Exit(1) } args := os.Args targets := args[1:] isRunning, err := isWinProcRunning(targets) if err != nil { fmt.Printf("Commnand failed.") os.Exit(1) } fmt.Printf("Processes in (%v) any Running? -> %v", targets, isRunning) } func isWinProcRunning(names []string) (bool, error) { if len(names) == 0 { return false, nil } cmd := exec.Command("tasklist.exe", "/FI", "STATUS eq RUNNING", "/fo", "csv", "/nh") cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} out, err := cmd.Output() if err != nil { return false, err } for _, name := range names { if bytes.Contains(out, []byte(name)) { return true, nil } } return false, nil }
実行例 1
proccheck.exe chrome.exe
Processes in ([chrome.exe]) any Running? -> true
実行例 2
proccheck.exe chrome.exe RLogin.exe
Processes in ([chrome.exe RLogin.exe]) any Running? -> true
実行例 3
proccheck.exe Dummy1.exe Dumm2.exe Dummy3.exe
Processes in ([Dummy1.exe Dumm2.exe Dummy3.exe]) any Running? -> false
というわけで、tasklist.exe
に頼れば、これだけではなく一覧出すことなんかも簡単にできると思います