ホームページ >バックエンド開発 >Golang >golang が os/exec ライブラリを使用してプロセスをクエリする方法

golang が os/exec ライブラリを使用してプロセスをクエリする方法

PHPz
PHPzオリジナル
2023-04-23 10:22:491083ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。