os.FindProcess を使用した Go でのプロセスの存在の確認
os.FindProcess を使用すると、プロセスの存在に関する情報が得られますが、完全に信頼できるわけではありません
Unix アプローチの利用
伝統的に、Unix コマンド kill -s 0 [PID] を使用して、プロセスが終了したか強制終了されたかを確認します。プロセスがまだ実行中です。このアプローチでは、実際のシグナルは送信されずに、プロセスに 0 のシグナルが送信されます。代わりに、プロセスの存在を確認する方法として機能します。
Go での実装
このメソッドを Go に変換すると、次のコードはプロセスかどうかを判断する方法を示します。はまだアクティブです:
import ( "fmt" "log" "os" "os/exec" "strconv" "syscall" ) func main() { for _, p := range os.Args[1:] { pid, err := strconv.ParseInt(p, 10, 64) if err != nil { log.Fatal(err) } process, err := os.FindProcess(int(pid)) if err != nil { fmt.Printf("Failed to find process: %s\n", err) } else { err := process.Signal(syscall.Signal(0)) fmt.Printf("process.Signal on pid %d returned: %v\n", pid, err) } } }
出力例
このコードを実行すると、異なる ID を持つプロセスのステータスを示す次の出力が提供されます:
$ ./kill 1 $$ 123 process.Signal on pid 1 returned: operation not permitted process.Signal on pid 12606 returned: <nil> process.Signal on pid 123 returned: no such process
以上がGo でプロセスの存在を確認する信頼できる方法はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。