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

Barbara Streisand
Lepaskan: 2024-11-06 22:34:02
asal
974 orang telah melayarinya

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)
        }
    }
}
Salin selepas log masuk

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
Salin selepas log masuk
  • 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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!