$ <b>ch10-reap2</b> /* ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */waiting for signalsEntered childhandler /* ΠΠΏΡΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° */Β reaped process 2702Β pid 2703 not available yetΒ pid 2704 not available yetΒ pid 2705 not available yetΒ pid 27 06 not available yetExited childhandlerwaiting for signalsEntered childhandler /* Π ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ */Β reaped process 2703Β pid 2704 not available yetΒ pid 2705 not available yetΒ pid 2706 not available yetExited childhandlerwaiting for signalsEntered childhandler /* Π ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅ */Β reaped process 2704Β pid 2705 not available yetΒ pid 2706 not available yetExited childhandlerwaiting for signalsEntered childhandlerΒ reaped process 2705Β pid 2706 not available yetExited childhandlerwaiting for signalsEntered childhandlerΒ reaped process 2706Exited childhandlerΠ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½
SIGCHLD$ <b>uname -a</b> /* ΠΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π²Π΅ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ */Linux example2 2.4.22-1.2115.npt1 #1 Wed Oct 29 15:42:51 EST 2003 i686 i686 i386 GNU/Linux$ <b>ch10-reap2</b> /* ΠΠ°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ */waiting for signalsEntered childhandler /* ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° Π²ΡΠ·Π²Π°Π½ Π»ΠΈΡΡ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ */Β reaped process 9564Β reaped process 9565Β reaped process 9566Β reaped process 9567Β reaped process 9568Exited childhandlerΠΠΠΠΠ§ΠΠΠΠ. Π ΠΊΠΎΠ΄Π΅ Π΄Π»Ρ
ch10-reap2.cch10-reap2.cSIGCHLDkidsnkidskidsleftmainΠΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π°; ΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠ΅ΡΡΠ²Π°ΡΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° Π±Π»ΠΎΠΊΠΈΡΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·Π±Π»ΠΎΠΊΠΈΡΡΡΡ
SIGCHLD10.8.3.3. Π‘ΡΡΠΎΠ³ΠΈΠΉ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ
Π‘ΡΡΡΠΊΡΡΡΠ°
siginfo_tsi_codesiginfo_tΠ‘Π»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°,
ch10-status.csiginfo_t1Β /* ch10-status.c --- Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ SIGCHLD, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Ρ 3 Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ */23Β #include <stdio.h>4Β #include <errno.h>5Β #include <signal.h>6Β #include <string.h>7Β #include <sys/types.h>8 Β #include <sys/wait.h>910 void manage(siginfo_t *si);11/* ...Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ²ΡΠΈΠΉΡΡ Π΄Π»Ρ format_num() ΠΊΠΎΠ΄ ΠΎΠΏΡΡΠ΅Π½... */Π’Π°Π±Π»ΠΈΡΠ° 10.5. ΠΠ½Π°ΡΠ΅Π½ΠΈΡ
si_codeSIGCHLD| ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Π‘ΠΌΡΡΠ» |
|---|---|
CLD_CONTINUED | ΠΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π±ΡΠ» Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½. |
CLD_DUMPED | ΠΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ, ΡΠΎΠ·Π΄Π°Π½ ΠΎΠ±ΡΠ°Π· ΠΏΡΠΎΡΠ΅ΡΡΠ° |
CLD_EXITED | ΠΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ. |
CLD_KILLED | ΠΠΎΡΠΎΠΌΠΎΠΊ Π±ΡΠ» Π·Π°Π²Π΅ΡΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ |
CLD_STOPPED | ΠΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π±ΡΠ» ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½. |
CLD_TRAPPED | Π’ΡΠ°ΡΡΠΈΡΡΠ΅ΠΌΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ (ΠΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΡΠ°ΡΡΠΈΡΡΠ΅ΡΡΡ β Π»ΠΈΠ±ΠΎ ΠΈΠ· ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠ°, Π»ΠΈΠ±ΠΎ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π²Ρ Π²ΡΡΠ΄ Π»ΠΈ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΠΎΠ±ΡΡΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ .) |
Π‘ΡΡΠΎΠΊΠΈ 3β8 Π²ΠΊΠ»ΡΡΠ°ΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, ΡΡΡΠΎΠΊΠ° 10 ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ
manage()format_num()