Menentukan Kewujudan Proses dalam Go
Dalam Go, fungsi os.FindProcess boleh digunakan untuk mendapatkan semula proses oleh PIDnya. Walau bagaimanapun, jika fungsi ini mengembalikan ralat, adakah ia semestinya menunjukkan bahawa proses telah ditamatkan?
Menyemak Kewujudan Proses
Menurut halaman manual untuk kill(2 ) dalam Unix, menghantar isyarat 0 kepada proses sebenarnya tidak menghantar isyarat tetapi menyemak sama ada proses itu hidup. Pendekatan ini boleh disesuaikan dalam Go untuk menentukan kewujudan proses.
Pelaksanaan Go
Kod Go berikut menunjukkan teknik ini:
package main import ( "fmt" "log" "os" "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) } } }
Output Contoh
Apabila dijalankan, kod ini akan memaparkan status berbilang proses:
$ ./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
Dalam contoh ini, proses 1 mengembalikan ralat kerana ia adalah tidak dimiliki oleh pengguna semasa. Proses 12606 mengembalikan sifar kerana ia masih hidup dan dimiliki oleh pengguna. Proses 123 mengembalikan ralat kerana ia tidak lagi wujud.
Atas ialah kandungan terperinci Adakah Panggilan os.FindProcess yang Gagal Masuk Mesti Bermakna Proses Telah Ditamatkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!