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 |
På 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.
SIG er et almindeligt signalpræfiks , CHLD er en forkortet engelsk stavemåde. barn - barn, barnobjekt (engelsk computerjargon ).
På 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).
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.
POSIX- signaler | |||
---|---|---|---|
| |||
|