Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Adakah Terdapat Cara Boleh Dipercayai untuk Menentukan Kewujudan Proses dalam Go?

Adakah Terdapat Cara Boleh Dipercayai untuk Menentukan Kewujudan Proses dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-06 22:34:02976semak imbas

Is There a Reliable Way to Determine Process Existence in Go?

Menentukan Kewujudan Proses dalam Go menggunakan os.FindProcess

Semasa menggunakan os.FindProcess boleh memberikan maklumat tentang kewujudan proses, ia tidak boleh dipercayai sepenuhnya untuk menentukan sama ada proses telah ditamatkan atau dibunuh.

Memanfaatkan Pendekatan Unix

Secara tradisinya, perintah Unix kill -s 0 [PID] digunakan untuk menyemak sama ada satu proses masih berjalan. Pendekatan ini menghantar isyarat 0 kepada proses, tanpa isyarat sebenar dihantar. Sebaliknya, ia berfungsi sebagai cara untuk mengesahkan kewujudan proses.

Pelaksanaan dalam Go

Menterjemah kaedah ini ke dalam Go, kod berikut menunjukkan cara untuk menentukan sama ada proses masih aktif:

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

Contoh Output

Menjalankan kod ini memberikan output berikut, menunjukkan status proses dengan ID yang berbeza:

$ ./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
  • Proses 1: Hidup tetapi tidak dimiliki oleh pengguna semasa.
  • Proses 12606: Hidup dan dimiliki oleh pengguna semasa.
  • Proses 123: Ditamatkan atau dibunuh.

Atas ialah kandungan terperinci Adakah Terdapat Cara Boleh Dipercayai untuk Menentukan Kewujudan Proses dalam Go?. 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