SIGCHLD

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 13 mars 2013; kontroller kräver 10 redigeringar .
SIGCHLD
Beskrivning Tillståndet för underordnad process har ändrats
Standard ignoreras
SA_SIGINFO- koder
CLD_EXITED normal uppsägning
CLD_KILLED krasch (ingen minnesdump)
CLD_DUMPED kraschar med minnesdump
CLD_TRAPPED slutade med en felsökningsfälla
CLD_STOPPED stannade
CLD_CONTINUED avrättningen fortsatte efter stopp

POSIX - system är SIGCHLD en signal som skickas när statusen för en underordnad process ändras (avbruten, avbruten eller återupptagen).

SIGCHLD är en heltalskonstant definierad i signal.h. De symboliska namnen på signalerna används istället för siffrorna, eftersom numren på signalerna kan skilja sig åt i olika implementeringar.

Etymologi

SIG är ett vanligt signalprefix , CHLD är en förkortad engelsk stavning. barn - barn, barnobjekt (engelsk datorjargong ).  

Användning

Unix kan en process skapa "underordnade" processer med ett systemanrop fork()eller varianter därav. Den överordnade processen, om den finns, meddelas av systemet att underordnade processer har avslutats (eller deras tillstånd har ändrats) med SIGCHLD-signalen. Föräldraprocessen bör inte vidta några åtgärder för att göra detta. Signalen kan ignoreras om den inte behöver bearbetas (den ignoreras som standard).

Zombieprocesser

Den underordnade processen vid avslutning blir en "zombie" - en tom post i processtabellen som lagrar information om den avslutade processen (mer exakt, utgångskoden) - tills den överordnade processen tar emot denna information med hjälp av ett systemanrop wait()eller avslutar sig själv.

I kortlivade program är förekomsten av "zombies" ganska normal - zombies tar inte upp många resurser och försvinner när föräldraprocessen avslutas. Men snygga programmerare sköter alltid om att hantera "zombies". I allmänhet, för att förhindra ackumulering av "zombies", bör programmet använda SIGCHLD-signalhanteraren med ett anrop wait(), men detta är inte alls nödvändigt, om det anropande programmet inte gör något i SIGCHLD-hanteraren förutom vänta, kan du helt enkelt ställa in denna hanterare till SIG_IGN och zombieprocesser kommer att samlas in [1] automatiskt. Det bör noteras här att inställningen av SIGCHLD till SIG_IGN är POSIX.1-2001-kompatibel och inte POSIX.1-1990-kompatibel.

Perl installation _

$SIG{'CHLD'}="IGNORE"

ställer faktiskt in en hanterare med att hantera zombieprocesser enligt beskrivningen ovan.

Python kl

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

gör detsamma.

Anteckningar

  1. microHOWTO: Skörda zombieprocesser med en SIGCHLD-hanterare . www.microhowto.info. Hämtad 4 maj 2016. Arkiverad från originalet 10 maj 2016.