Adakah Panggilan os.FindProcess yang Gagal Masuk Mesti Bermakna Proses Telah Ditamatkan?

Barbara Streisand
Lepaskan: 2024-11-08 07:25:02
asal
266 orang telah melayarinya

Does a Failed os.FindProcess Call in Go Necessarily Mean a Process Has Terminated?

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

    }
}
Salin selepas log masuk

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

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!

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!