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 |
På 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.
SIG är ett vanligt signalprefix , CHLD är en förkortad engelsk stavning. barn - barn, barnobjekt (engelsk datorjargong ).
På 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).
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.
POSIX- signaler | |||
---|---|---|---|
| |||
|