Rumah > Artikel > pembangunan bahagian belakang > Bagaimana untuk Memeriksa Kewujudan Proses dengan Amanah dalam Go Beyond os.FindProcess?
Cara Mengesahkan Kewujudan Proses dalam Go Tanpa Bergantung Semata-mata pada os.FindProcess
Apabila berurusan dengan proses dalam Go, perkara biasa kecenderungan adalah untuk menggunakan os.FindProcess untuk menentukan sama ada proses dengan PID tertentu wujud. Walau bagaimanapun, hanya bergantung pada kaedah ini boleh membawa kepada kesimpulan yang tidak tepat.
Keterbatasan os.FindProcess
os.FindProcess dengan berkesan menanyakan sistem pengendalian untuk mendapatkan maklumat tentang sesuatu proses . Jika proses dengan PID yang ditentukan wujud, ia mengembalikan hasil bukan ralat. Walau bagaimanapun, jika proses telah ditamatkan, os.FindProcess masih boleh melaporkan kejayaan jika sistem pengendalian belum lagi menuai proses (iaitu, mengalih keluar masuknya daripada jadual proses sistem). Ini boleh membawa kepada positif palsu, menunjukkan bahawa proses masih berjalan apabila ia telah benar-benar selesai.
Meneroka Penyelesaian Alternatif: Menghantar Isyarat
Untuk menyemak dengan pasti kewujudan proses, kita boleh menggunakan pendekatan Unix tradisional untuk menghantar isyarat 0 (sifar) kepada proses sasaran. Teknik ini berfungsi kerana:
Melaksanakan Penyelesaian Berasaskan Isyarat dalam Go
Berikut ialah contoh fungsi Go yang menggunakan ini pendekatan:
package main import ( "fmt" "log" "os" "os/signal" "strconv" ) // checkProcessExistence sends a signal of 0 to a process to determine its existence. func checkProcessExistence(pid int) bool { process, err := os.FindProcess(pid) if err != nil { log.Fatal(err) } err = process.Signal(signal.Signal(0)) if err != nil { return false } return true } func main() { for _, p := range os.Args[1:] { pid, err := strconv.ParseInt(p, 10, 64) if err != nil { log.Fatal(err) } if checkProcessExistence(int(pid)) { fmt.Printf("Process with PID %d is running\n", pid) } else { fmt.Printf("Process with PID %d is not running\n", pid) } } }
Contoh Penggunaan
Andaikan anda mempunyai PID proses A dan anda ingin mengesahkan sama ada ia masih berjalan:
$ go run main.go 12345 Process with PID 12345 is running
Output ini mengesahkan bahawa proses 12345 sememangnya hidup.
Atas ialah kandungan terperinci Bagaimana untuk Memeriksa Kewujudan Proses dengan Amanah dalam Go Beyond os.FindProcess?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!