Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.15, ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ pause, ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΡΠΎΡΠ΅ΡΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ PID ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΈ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ status. ΠΡΠ»ΠΈ Π±Ρ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ exit ΠΎΡΡΡΡΡΡΠ²ΠΎΠ²Π°Π», Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° ΡΠ΄Π΅Π»Π°Π»Π° Π±Ρ Π΅Π³ΠΎ ΠΏΠΎ Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ main. ΠΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΡΠΆΠ΅ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ.
7.4 ΠΠΠΠΠΠΠΠ ΠΠΠΠΠ Π¨ΠΠΠΠ― ΠΠ«ΠΠΠΠΠΠΠΠ― ΠΠ ΠΠ¦ΠΠ‘Π‘Π
ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°, Π΅ΡΠ»ΠΈ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ wait. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ:
pid = wait(stat_addr);
Π³Π΄Π΅ pid β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ (PID) ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ°, stat_addr β Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π»ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ exit Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ Π·Π°Π΄Π°ΡΠΈ.
main() {
int child;
if ((child = fork()) == 0) {
printf("PID ΠΏΠΎΡΠΎΠΌΠΊΠ° %d\n", getpid());
pause(); /* ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° */
}
/* ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ */
printf("PID ΠΏΠΎΡΠΎΠΌΠΊΠ° %d\n", child);
exit(child);
}
Π ΠΈΡΡΠ½ΠΎΠΊ 7.15. ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ exit
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ wait ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.16. Π―Π΄ΡΠΎ Π²Π΅Π΄Π΅Ρ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΈΡ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΌΠΎΠΊ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½, ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ exit, ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ ΡΡΠ½ΠΊΡΠΈΡ wait. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ exit (status) Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π² Π·Π°ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ΅Π΄ΠΊΠΎ. Π―Π΄ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΠΎΠ»Ρ, ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ΄ΡΠ° ΠΈ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°Π΄Π°ΡΠΈ ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΡΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π² Π½Π΅ΠΉ Π·Π°Π½ΠΈΠΌΠ°Π» ΠΏΡΠ΅ΠΆΠ΄Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΠΉ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠΎ ΠΌΠ΅ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½ΠΎΠ²ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ.
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΎΠ½ ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°. Π―Π΄ΡΠΎ Π½Π΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ ΠΏΠΎ ΡΠ²ΠΎΠ΅ΠΉ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Π΅ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ²ΡΠΈΠΉΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait: ΡΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ° Π²ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ, ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠ³Π½Π°Π»Π° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β», ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ΅Π°Π³ΠΈΡΡΠ΅Ρ ΡΠ°Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π Π΅Π°ΠΊΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° ΡΠΈΠ³Π½Π°Π» Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β» ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ-ΡΠ°Π·Π½ΠΎΠΌΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²:
β’ ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (ΡΠΎ Π΅ΡΡΡ Π΅ΡΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ ΠΎΠ³ΠΎΠ²ΠΎΡΠ΅Π½Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ) ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΡΡΠ°Π½ΠΎΠ²Π°, Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ½ Π²ΠΎΡΠ΅Π» Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait, ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ issig Π΄Π»Ρ ΠΎΠΏΠΎΠ·Π½Π°Π½ΠΈΡ ΡΠΈΠΏΠ° ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅Π³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°. ΠΠ»Π³ΠΎΡΠΈΡΠΌ issig (Π ΠΈΡΡΠ½ΠΎΠΊ 7.7) ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΠΎΡΠΎΠ±ΡΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° ΡΠΈΠΏΠ° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β» ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Β«Π»ΠΎΠΆΡΒ». ΠΠΎΡΡΠΎΠΌΡ ΡΠ΄ΡΠΎ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ longjump ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ sleep, Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ wait. ΠΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ wait, Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΠΎΠ΄Π½ΠΎΠ³ΠΎ), ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ, ΠΈ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΈ wait, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠ΅ΠΌΡ Π΅Π΅.
β’ ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠ΄ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π°, ΠΊΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° Π»ΡΠ±ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
β’ ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΡΠΎ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠ°ΠΌΠΈ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΠΌΠΈ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΡΠ°Π²ΡΠΈΡ ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ².
Π°Π»Π³ΠΎΡΠΈΡΠΌ wait
Π²Ρ ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: Π°Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ status, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ
Π²ΡΡ ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΈ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ exit
{
if (ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ wait, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ²) return (ΠΎΡΠΈΠ±ΠΊΡ);
for (;;) { /* ΡΠΈΠΊΠ» Ρ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌ ΡΠΈΠΊΠ»ΠΎΠΌ */
if (ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΈΠΌΠ΅Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅) {
Π²ΡΠ±ΡΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°;
ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°;
ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠ΅ΡΡΠΎ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ;
return (ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ exit, Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠΌ);
}
if (Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ²) return ΠΎΡΠΈΠ±ΠΊΡ;
ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΌ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ (Π΄ΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°);
}
}
Π ΠΈΡΡΠ½ΠΎΠΊ 7.16. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ wait
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΡ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.17, Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΈ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ°Π·Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ. Π‘Π½Π°ΡΠ°Π»Π° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° (Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ β ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ Π΅ΡΡΡ argc ΡΠ°Π²Π½ΠΎ 1). Π ΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ 15 ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ Π·Π°Π²Π΅ΡΡΠ°ΡΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° i, Π½ΠΎΠΌΠ΅ΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. Π―Π΄ΡΠΎ, ΠΈΡΠΏΠΎΠ»Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ wait Π΄Π»Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π΅Π³ΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΈ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ exit. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π°ΡΠ°Π½Π΅Π΅ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½. ΠΠ· ΡΠ΅ΠΊΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ exit, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΠΎΠΉ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ ΠΊΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ exit Π² Π±ΠΈΡΠ°Ρ 8-15 ΠΏΠΎΠ»Ρ ret_code ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ wait ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ret_code Ρ ΡΠ°Π½ΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ 256*i, Π³Π΄Π΅ i β Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°, Π° Π² ret_val Π·Π°Π½ΠΎΡΠΈΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° ΠΏΠΎΡΠΎΠΌΠΊΠ°.
ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ (ΡΠΎ Π΅ΡΡΡ argc βΊ 1), ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ signal Π΄Π΅Π»Π°Π΅Ρ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ ΡΠΈΠΏΠ° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β». ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ Π΅ΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²Π΅Π» ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ exit: ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ exit, ΠΎΠ½ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠ²ΠΎΠ΅ΠΌΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΡΠΈΠ³Π½Π°Π» Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β»; ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π±ΡΠ» ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠΌ ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ. ΠΠΎΠ³Π΄Π° ΡΠ°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΎΠ½ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ, ΡΡΠΎ ΡΠΈΠ³Π½Π°Π» ΡΠΎΠΎΠ±ΡΠ°Π» ΠΎ Β«Π³ΠΈΠ±Π΅Π»ΠΈΒ» ΠΏΠΎΡΠΎΠΌΠΊΠ°; ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈΡ , ΡΠ΄ΡΠΎ ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π·Π°ΠΏΠΈΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅ΠΌΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΡ, ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ wait ΡΠ°ΠΊ, ΡΠ»ΠΎΠ²Π½ΠΎ ΡΠΈΠ³Π½Π°Π»Π° ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ. Π―Π΄ΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΡΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π» ΡΠΈΠΏΠ° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β», Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΠΊΠ» Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait Π½Π΅ Π±ΡΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ ΠΈ ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ, ΡΡΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² Π½Π΅Ρ. Π’ΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ wait Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ -1. Π Π°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅ΡΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΆΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ ΠΆΠ΄Π΅Ρ, ΠΏΠΎΠΊΠ° Π·Π°Π²Π΅ΡΡΠ°ΡΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΈ.
#include βΉsignal.hβΊ
main(argc, argv)
int argc;
char *argv[];
{
int i, ret_val, ret_code;
if (argc βΊ= 1) signal(SIGCLD, SIG_IGN); /* ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² */
for (i = 0; i βΉ 15; i++) if (fork() == 0) {
/* ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ */
printf("ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ %x\n", getpid());
exit(i);
}
ret_val = wait(&ret_code);
printf("wait ret_val %x ret_code %x\n", ret_val, ret_code);
}
Π ΠΈΡΡΠ½ΠΎΠΊ 7.17. ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait ΠΈ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β»
Π ΡΠ°Π½Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ UNIX ΡΡΠ½ΠΊΡΠΈΠΈ exit ΠΈ wait Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΈ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠΈΠ³Π½Π°Π» ΡΠΈΠΏΠ° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β». ΠΠΌΠ΅ΡΡΠΎ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ exit Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΡΠ»ΠΈ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ wait ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΡΡ, ΠΎΠ½ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠ΅Π³ΠΎ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π½Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ; ΠΏΡΠΎΡΠ΅ΡΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡ Β«ΠΏΠΎΠ³ΠΈΠ±ΡΠ΅Π³ΠΎΒ» ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΏΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ wait. Π’ΠΎΡΠ½ΠΎ ΡΠ°ΠΊ ΠΆΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π³ΡΡΠ·ΠΊΠΈ (init) ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΈ Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΏΠΎ exit ΠΏΡΠΎΡΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠ½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅.