Go 言語はオープンソースのプログラミング言語で、豊富な標準ライブラリと効率的な同時プログラミングのサポートだけでなく、強力なプロセス処理ライブラリ os/exec も備えています。この記事では、os/exec ライブラリを使用してプロセスをクエリする方法を説明します。
まず、簡単な例を見てみましょう:
package main import ( "fmt" "os/exec" ) func main() { cmd := exec.Command("ps", "-ef") output, err := cmd.Output() if err != nil { fmt.Println(err) return } fmt.Println(string(output)) }
上の例では、os/exec ライブラリを使用して Command オブジェクトを作成し、ps -ef コマンドを実行しました。 Command オブジェクトの Output メソッドは、プロセスの標準出力をバイト配列にキャプチャして返します。
このコードを実行すると、Linux システムで実行されているすべてのプロセスのリストが表示されます。しかし、単に「myprocess」という名前のプロセスを見つけたい場合はどうすればよいでしょうか?
続行する前に、ps コマンド出力の形式を理解しておく必要があります。 ps コマンドは、内容を次の形式で出力します。
UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:38 ? 00:00:01 /sbin/init root 2 0 0 10:38 ? 00:00:00 [kthreadd]
この形式では、2 番目の列はプロセスの ID、10 番目の列はプロセスの名前です。プロセスをクエリするときにこれらの列を使用できます。
ここで、「myprocess」という名前のプロセスのみを表示するように前の例を変更しましょう:
package main import ( "fmt" "os/exec" "strings" ) func main() { cmd := exec.Command("ps", "-ef") output, err := cmd.Output() if err != nil { fmt.Println(err) return } lines := strings.Split(string(output), "\n") for _, line := range lines { if strings.Contains(line, "myprocess") { fmt.Println(line) } } }
この例では、まず strings.Split 関数 Text を使用してプロセス リストを行に分割します。その後、各行をループし、その中で「myprocess」という名前の行を検索します。見つかった場合は、この行を出力します。
もちろん、この例は単なる例です。実際のアプリケーションでは、さまざまな条件に基づいてプロセスをフィルタリングする必要がある場合があります。幸いなことに、os/exec ライブラリには必要なツールがすべて用意されています。
ここで、このコードを実行し、「myprocess」という名前のプロセスが実行されている場合、次のような出力が表示されるはずです。
myuser 1234 1 0 Apr09 ? 00:00:00 myprocess
ここでは、方法を示す簡単な例を処理します。 os/exec ライブラリを使用してプロセスをクエリします。もちろん、os/exec はそれ以上のことを行うことができます。ニーズがどれほど複雑であっても、プロセスを処理するために必要なツールを提供してくれると信頼できます。
以上がgolang が os/exec ライブラリを使用してプロセスをクエリする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。