Ce face os.Getpid
Fiecare proces are un număr unic, PID-ul. os.Getpid îl returnează pe al programului tău, iar os.Getppid pe al procesului părinte (de obicei shell-ul sau serviciul care te-a pornit).
PID-ul este util în jurnale, ca să deosebești mai multe instanțe ale aceluiași program, sau într-un fișier .pid folosit de scripturile de oprire. Valorile diferă la fiecare pornire.
Ce returnează
Un număr întreg pozitiv.
Exemple
Exemplul 1: Afișarea PID-urilor
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println("PID:", os.Getpid())
fmt.Println("PID părinte:", os.Getppid())
}
Rezultat posibil (diferă la fiecare rulare)
PID: 48213
PID părinte: 47990
Exemplul 2: Fișier .pid
Scriem PID-ul într-un fișier și îl recitim; verificăm doar că sunt egale.
package main
import (
"fmt"
"os"
"strconv"
"strings"
)
func main() {
os.WriteFile("server.pid", []byte(strconv.Itoa(os.Getpid())+"\n"), 0o644)
date, _ := os.ReadFile("server.pid")
pid, _ := strconv.Atoi(strings.TrimSpace(string(date)))
fmt.Println("PID salvat corect:", pid == os.Getpid())
fmt.Println("părintele e alt proces:", os.Getppid() != os.Getpid())
}
Rezultat
PID salvat corect: true
părintele e alt proces: true
Greșeli frecvente
- Folosești PID-ul ca identificator unic pe termen lung. După ce procesul se termină, sistemul poate da același număr altui proces.
Comenzi înrudite
os.Getuid: Returnează ID-ul utilizatorului și al grupului care rulează programul (reale și efective) și lista grupurilor.os.Hostname: Returnează numele calculatorului (host name) raportat de sistemul de operare.os.Exit: Oprește imediat programul cu codul de ieșire dat; funcțiile amânate cu defer nu mai rulează.os.FindProcess: Returnează un *os.Process pentru PID-ul dat, ca să-i poți trimite semnale, să-l oprești sau să-l aștepți.