Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara golang menggunakan perpustakaan os/exec untuk menanyakan proses

Cara golang menggunakan perpustakaan os/exec untuk menanyakan proses

PHPz
PHPzasal
2023-04-23 10:22:491062semak imbas

Bahasa Go ialah bahasa pengaturcaraan sumber terbuka Ia bukan sahaja mempunyai perpustakaan standard yang kaya dan sokongan pengaturcaraan serentak yang cekap, tetapi juga mempunyai perpustakaan pemprosesan proses yang berkuasa - os/exec. Dalam artikel ini, kami akan menerangkan cara membuat pertanyaan proses menggunakan perpustakaan os/exec.

Mula-mula, mari kita lihat contoh mudah:

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))
}

Dalam contoh di atas, kami mencipta objek Perintah menggunakan perpustakaan os/exec dan melaksanakan arahan ps -ef . Kaedah Output objek Perintah menangkap output standard proses ke dalam tatasusunan bait dan mengembalikannya.

Jika anda menjalankan kod ini, anda akan melihat senarai semua proses yang berjalan pada sistem Linux anda. Tetapi bagaimana jika anda hanya mahu mencari proses bernama "myprocess"?

Sebelum meneruskan, kita perlu mengetahui format output arahan ps. Arahan ps mengeluarkan kandungan dalam format berikut:

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]

Dalam format ini, lajur kedua ialah ID proses dan lajur kesepuluh ialah nama proses. Kita boleh menggunakan lajur ini apabila menanyakan proses.

Sekarang, mari kita ubah suai contoh sebelumnya untuk hanya menunjukkan proses bernama "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)
        }
    }
}

Dalam contoh ini, kita mula-mula menggunakan rentetan.Fungsi Split untuk membahagikan senarai proses kepada Baris demi baris teks. Selepas itu, kami mengulangi setiap baris dan mencari baris bernama "myprocess" di dalamnya. Jika dijumpai, kami mencetak baris ini.

Sudah tentu, contoh ini hanyalah contoh. Dalam aplikasi sebenar, anda mungkin perlu menapis proses berdasarkan keadaan yang berbeza. Nasib baik, perpustakaan os/exec menyediakan semua alat yang diperlukan.

Sekarang, jika anda menjalankan kod ini, dan anda mempunyai proses yang dipanggil "myprocess" berjalan, anda akan melihat output yang serupa dengan yang berikut:

myuser     1234     1  0 Apr09 ?        00:00:00 myprocess

Di sini, kami memproses Contoh mudah menunjukkan cara menggunakan perpustakaan os/exec untuk menanyakan proses. Sudah tentu, os/exec boleh melakukan lebih daripada itu. Tidak kira betapa rumitnya keperluan anda, anda boleh mempercayainya untuk menyediakan alatan yang diperlukan untuk mengendalikan proses tersebut.

Atas ialah kandungan terperinci Cara golang menggunakan perpustakaan os/exec untuk menanyakan proses. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn