SIGCHLD

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 13. marts 2013; checks kræver 10 redigeringer .
SIGCHLD
Beskrivelse Underordnet procestilstand ændret
Standard ignoreret
SA_SIGINFO Koder
CLD_EXITED normal opsigelse
CLD_KILLED crash (ingen hukommelsesdump)
CLD_DUMPED crash med memory dump
CLD_FANGET endte med en fejlfindingsfælde
CLD_STOPPET holdt op
CLD_CONTINUED udførelsen fortsatte efter stop

POSIX - systemer er SIGCHLD et signal, der sendes, når status for en underordnet proces ændres (afsluttet, suspenderet eller genoptaget).

SIGCHLD er en heltalskonstant defineret i signal.h. De symbolske navne på signalerne bruges i stedet for numrene, da numrene på signalerne kan være forskellige i forskellige implementeringer.

Etymologi

SIG er et almindeligt signalpræfiks , CHLD er en forkortet engelsk stavemåde. barn - barn, barnobjekt (engelsk computerjargon ).  

Brug

Unix kan en proces afføde "underordnede" processer med et systemkald fork()eller variationer deraf. Den overordnede proces, hvis den findes, underrettes af systemet om, at underordnede processer er afsluttet (eller deres tilstand er ændret) med SIGCHLD-signalet. Forældreprocessen bør ikke foretage sig noget for at gøre dette. Signalet kan ignoreres, hvis det ikke skal behandles (det ignoreres som standard).

Zombie processer

Den underordnede proces ved afslutning bliver en "zombie" - en tom post i procestabellen, der gemmer information om den afsluttede proces (mere præcist, exit-koden) - indtil den overordnede proces modtager disse oplysninger ved hjælp af et systemkald wait()eller afslutter sig selv.

I kortlivede programmer er tilstedeværelsen af ​​"zombier" ganske normal - zombier optager ikke mange ressourcer og forsvinder med afslutningen af ​​forældreprocessen. Men pæne programmører sørger altid for at håndtere "zombier". Generelt, for at forhindre akkumulering af "zombier", bør programmet bruge SIGCHLD-signalbehandleren med et opkald wait(), men dette er slet ikke nødvendigt, hvis det kaldende program ikke gør noget i SIGCHLD-handleren undtagen at vente, så kan du blot indstille denne handler til SIG_IGN og zombie processer vil blive indsamlet [1] automatisk. Det skal her bemærkes, at indstilling af SIGCHLD til SIG_IGN er POSIX.1-2001-kompatibel og ikke POSIX.1-1990-kompatibel.

Perl installation _

$SIG{'CHLD'}="IGNORE"

sætter faktisk en handler med håndtering af zombieprocesser som beskrevet ovenfor.

Python kl

signal.signal(signal.SIGCHLD, signal.SIG_IGN)

gør det samme.

Noter

  1. microHOWTO: Høst zombieprocesser ved hjælp af en SIGCHLD-handler . www.microhowto.info. Hentet 4. maj 2016. Arkiveret fra originalen 10. maj 2016.