最近、golang を学習しているときに、次の要件に遭遇しました。プログラムの実行中、プログラムの正確な実行を保証するために、システム内で指定された他のプログラムを閉じる必要があります。この要件を達成するために、私はいくつかの調査を行った結果、次の方法を提供しました。
方法 1: exec.Command
golang には exec パッケージがあり、これを通じて外部コマンドを実行できます。つまり、他のプログラムも golang プログラムを通じて実行できます。この機能に基づいて、exec.Command メソッドを使用して、他の指定されたプログラムを閉じることができます。
コード例:
cmd := exec.Command("taskkill", "/F", "/IM", "notepad.exe") err := cmd.Run() if err != nil { fmt.Println("execute command failed: ", err) }
上記のコードは、Windows システムで exec.Command メソッドを通じて taskkill コマンドを実行し、notepad.exe プログラムを閉じます。このうち、/F はプロセスの強制終了を意味し、/IM の後にプロセス名が続きます。
次に、コードに基づいて exec.Command の実行メソッドを分析します。
方法 2: syscall.Kill
exec パッケージを使用して外部コマンドを実行してプロセスをシャットダウンすることに加えて、golang はネイティブ メソッド syscall.Kill も提供します。この関数は、指定されたプロセスの PID を直接強制終了できます。
コード例:
pid := 123 // 进程的PID err := syscall.Kill(pid, syscall.SIGKILL) // 执行kill命令 if err != nil { fmt.Println("kill process failed: ", err) }
上記のコードは、syscall.Kill 関数を使用して、指定された PID プロセスをシャットダウンします。 SIGKILL は Linux システムの kill コマンドで、プロセスを直接強制終了できます。これはプロセスを強制的に終了するのと同じです。
次に、コードに基づいて syscall.Kill の実行メソッドを分析します。
方法 3: サードパーティ ライブラリを使用する
上記 2 つの方法に加えて、サードパーティ ライブラリを使用して、他のプログラムを閉じる機能を実現することもできます。最も一般的に使用されるライブラリは github.com/mitchellh/go-ps ライブラリで、現在システムで実行されているすべてのプロセスに関する情報を返すことができます。
指定された名前のプロセスを見つけて、プロセス情報に基づいて強制終了します。
コード例:
processes, err := ps.Processes() if err != nil { fmt.Println("get processes failed: ", err) return } for _, p := range processes { if strings.Contains(p.Executable(), "notepad") { err := syscall.Kill(p.Pid(), syscall.SIGTERM) if err != nil { fmt.Println("kill process failed: ", err) } } }
上記のコードは、サードパーティ ライブラリ github.com/mitchellh/go-ps を通じてシステム内のすべてのプロセス情報を取得し、これらのプロセスを走査して名前を検索します。メモ帳プロセスを含むので、それを強制終了します。
次に、コードに基づいて go-ps ライブラリの使用方法を分析しましょう:
上記の 3 つのメソッドのうち、exec.Command と syscall.Kill はネイティブの golang メソッドであり、比較的簡単に使用できます。サードパーティライブラリを利用する方法では、外部ライブラリの導入が必要になりますが、プロセスの起動時間など、より豊富な情報を取得できます。
概要
上記の 3 つの方法により、golang プログラムが他のプログラムを閉じる機能を実現できます。プログラムの動作の正確性を保証する必要がある場合、この方法でシステム内の不要なプロセスを強制終了して、プログラムの安定性を確保できます。これらの方法を使用するときは、他のプロセスを誤って削除しないように、プロセスの PID と名前に特に注意してください。
以上がgolang 他のプログラムを閉じますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。