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
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!