os.Getpid în Go

Getpid returnează ID-ul procesului curent; Getppid, ID-ul procesului care l-a pornit (părintele).

Sintaxă
func Getpid() int
func Getppid() int

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.