ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ PID Π·Π°Π²Π΅ΡΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ -1, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ-ΠΏΠΎΡΠΎΠΌΠΊΠΈ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΡ.
Π Perl Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΈ ΠΈΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ - ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» (pipe), ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ Π΄Π²Π° ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠ° - ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ (reader) ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ (writer) - ΡΠ²ΡΠ·Π°Π½Π½ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π·Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π² ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΎΡΠΈΡΠ°Π½Ρ ΠΈΠ· ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ pipe(), ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΠΈΠΌΠ΅Π½Π° Π΄Π²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΎΡΠΎΠ²: ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° ΠΈ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ°. ΠΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» ΠΏΠΎΠΊΠ°Π·Π°Π½ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
use IO::Handle; # ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ pipe(READER, WRITER); # ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» WRITER->autoflush(1); # Π²ΠΊΠ»ΡΡΠ°Π΅ΠΌ Π°Π²ΡΠΎ-ΠΎΡΠΈΡΡΠΊΡ Π±ΡΡΠ΅ΡΠ° if ($pid = fork()) { # ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΡΠ΅Π΄ΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ PID ΠΏΠΎΡΠΎΠΌΠΊΠ° close READER; # ΠΏΡΠ΅Π΄ΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠΈΡΠ°ΡΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π° print WRITER "ΠΠΎΡΠ»Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ (PID $$):\n"; for (my $n = 1; $n <= 5; $n++) { # Π·Π°ΠΏΠΈΡΡ Π² ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ print WRITER "$n "; } close WRITER; # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ ΠΊΠ°Π½Π°Π» ΠΈ waitpid $pid, 0; # ΠΆΠ΄Π΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° } die "fork Π½Π΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»: $!" unless defined $pid; if (!$pid) { # ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ 0 close WRITER; # ΠΏΡΠ΅Π΄ΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΈΡΠ°ΡΡ Π² ΠΊΠ°Π½Π°Π» print "ΠΠΎΡΠΎΠΌΠΎΠΊ (PID $$) ΠΏΡΠΎΡΠΈΡΠ°Π»:\n"; while (my $line = <READER>) { # ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ° print "$line"; } close READER; # ΠΊΠ°Π½Π°Π» Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ exit; # ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ }
ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ²Π΅Π΄Π΅Π½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅:
ΠΠΎΡΠΎΠΌΠΎΠΊ (PID -2032) ΠΏΡΠΎΡΠΈΡΠ°Π»: ΠΠΎΡΠ»Π°Π½ΠΎ ΠΏΡΠ΅Π΄ΠΊΠΎΠΌ (PID 372): 1 2 3 4 5
ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ ΠΊΠ°Π½Π°Π», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΠΎΡΠΎΠΌΠΊΠ΅, Π° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊ - Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΡΠ΅Π΄ΠΊΠ΅. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΡΠΎ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π΄Π²ΡΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΊΠ°Π½Π°Π»Π° Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² ΠΎΠ±ΠΎΠΈΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ .
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΊΠ°Π½Π°Π»ΠΎΠ², ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: ΡΠ΅ΡΠ΅Π· ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ (FIFO) ΠΈ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² (ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΠΈ) ΠΈ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ².
Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎ Π½Π°ΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡΠΎΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΡΠΈΠ³Π½Π°Π»Π°Ρ . Π Π°Π±ΠΎΡΠ° Ρ Π½ΠΈΠΌΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΠ‘ Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π» ΠΏΡΠΎΡΠ΅ΡΡΡ. Π‘ΠΈΠ³Π½Π°Π»Ρ ΠΌΠΎΠ³ΡΡ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΠ‘ ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π» Π΄ΡΡΠ³ΠΎΠΌΡ. ΠΡΠΎΡΠ΅ΡΡ, ΠΏΠΎΠ»ΡΡΠΈΠ²ΡΠΈΠΉ ΡΠΈΠ³Π½Π°Π», ΡΠ°ΠΌ ΡΠ΅ΡΠ°Π΅Ρ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π½Π΅Π³ΠΎ, - Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π». ΠΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ, Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΌ Ρ ΡΡΠ΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ %SIG. ΠΠΎΡΡΠΎΠΌΡ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ²Π΅ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ keys(%SIG). ΠΠ±ΡΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ - ΡΠΈΠ³Π½Π°Π» ΠΏΡΠ΅ΡΡΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ INT, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°Π²ΠΈΡ Ctrl+C. ΠΠ°ΠΊ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° INT:
# ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° INT $SIG{INT} = \&sig_handler; # ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ # Π½Π°ΡΠ°Π»ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ print "Π Π°Π±ΠΎΡΠ°Ρ Π² ΠΏΠΎΡΠ΅ Π»ΠΈΡΠ°...\n" while (1); # Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠΉ ΡΠΈΠΊΠ» sub sig_handler { # ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° $SIG{INT} = \&sig_handler; # ΠΏΠ΅ΡΠ΅ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ print "ΠΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π» INT ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Ctrl+C\n"; print "ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΡΠ°Π±ΠΎΡΡ!\n"; exit; # Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ }
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ, ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡΠΈΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅Π³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°:
Π Π°Π±ΠΎΡΠ°Ρ Π² ΠΏΠΎΡΠ΅ Π»ΠΈΡΠ°... ΠΠΎΠ»ΡΡΠ΅Π½ ΡΠΈΠ³Π½Π°Π» INT ΠΏΠΎ Π½Π°ΠΆΠ°ΡΠΈΡ Ctrl+C ΠΠ°ΠΊΠ°Π½ΡΠΈΠ²Π°Ρ ΡΠ°Π±ΠΎΡΡ!
ΠΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉΡΡ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΠΆΠΈΡΡ Π»ΡΠ±ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΡΠ²ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠ³Π½Π°Π»Π° (ΠΎΠ±ΡΡΠ½ΠΎ HUP ΠΈΠ»ΠΈ USR1). ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΡΠΈΠ³Π½Π°Π», ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΡΡΠ° %SIG ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° 'IGNORE'. ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ ΡΠΈΠ³Π½Π°Π»Π° ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΈΡΠ²ΠΎΠΈΠ² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ %SIG ΡΡΡΠΎΠΊΡ 'DEFAULT'.
ΠΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ ΡΠ°ΠΌΠΎΠΌΡ ΡΠ΅Π±Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ (Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ°). Π ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ:
# ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° ALRM (Π±ΡΠ΄ΠΈΠ»ΡΠ½ΠΈΠΊ) $SIG{ALRM} = sub { die "Timeout"; }; # Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°Ρ ΠΏΠΎΠ΄ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° $timeout = 3600; # ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠ°ΠΉΠΌ-Π°ΡΡΠ° (ΡΠ΅ΠΊ.) eval { # Π±Π»ΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ alarm($timeout); # ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° # Π½Π΅ΠΊΠ°Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ: print "Π Π°Π±ΠΎΡΠ°Ρ Π² ΠΏΠΎΡΠ΅ Π»ΠΈΡΠ°...\n" while (1); alarm(0); # Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ }; # Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ [email protected] - ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅ if ( [email protected] =~ /Timeout/) { # ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ print "ΠΠ²Π°ΡΠΈΠΉΠ½ΡΠΉ Π²ΡΡ ΠΎΠ΄ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ!"; }
ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄ΡΡΠ²Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². Π‘ΠΈΠ³Π½Π°Π» ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ kill(), ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π΄Π²Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°: Π½ΠΎΠΌΠ΅Ρ ΡΠΈΠ³Π½Π°Π»Π° ΠΈ PID ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π‘Ρ Π΅ΠΌΡ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π° ΡΠΈΠ³Π½Π°Π»Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΠ΅ ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΡΠ΅Π΄ΠΊΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡΠ΅Π±Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
my $parent = $$; # PID ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° my $pid = fork(); # 'ΡΠ°Π·Π²Π΅ΡΠ²ΠΈΡΡ' ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ # fork Π²Π΅ΡΠ½Π΅Ρ PID ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΡΠ΅Π΄ΠΊΠ΅ ΠΈ 0 Π² ΠΏΠΎΡΠΎΠΌΠΊΠ΅ die "fork Π½Π΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»: $!" unless defined $pid; if ($pid) { # ---------- ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ---------- print "ΠΠ°ΡΠ°Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID $$\n"; for (1..3) { print "ΠΡΠ΅Π΄ΠΎΠΊ PID $$ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ $_\n"; print "ΠΡΠ΅Π΄ΠΎΠΊ PID $$ ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ³Π½Π°Π»\n"; kill HUP, $pid; sleep 2; # 'Π·Π°ΡΠ½ΡΡΡ' Π½Π° 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ } print "ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ (PID $$)\n"; } unless ($pid) { # ---------- Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ ---------- my $counter = 0; # ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² $SIG{HUP} = sub { ### ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π° ### $counter++; print "\tΠΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ» $counter-ΠΉ ΡΠΈΠ³Π½Π°Π»!\n"; }; ### ΠΊΠΎΠ½Π΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π° ### print "\tΠΠ°ΡΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID $$ ΠΏΡΠ΅Π΄ΠΊΠ° $parent\n"; for (1..7) { print "\tΠΠΎΡΠΎΠΌΠΎΠΊ PID $$ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ $_\n"; sleep 1; # 'Π·Π°ΡΠ½ΡΡΡ' Π½Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ } print "\tΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID $$\n"; }
ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΠΏΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΌ ΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ:
ΠΠ°ΡΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΠΏΡΠ΅Π΄ΠΊΠ° 696 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΠ°ΡΠ°Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID 696 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ³Π½Π°Π» ΠΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ» 1-ΠΉ ΡΠΈΠ³Π½Π°Π»! ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ³Π½Π°Π» ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ» 2-ΠΉ ΡΠΈΠ³Π½Π°Π»! ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 4 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΡΠ΅Π΄ΠΎΠΊ PID 696 ΠΎΡΠΏΡΠ°Π²ΠΈΠ» ΡΠΈΠ³Π½Π°Π» ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 5 ΠΠΎΡΠΎΠΌΠΎΠΊ ΠΏΠΎΠ»ΡΡΠΈΠ» 3-ΠΉ ΡΠΈΠ³Π½Π°Π»! ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 6 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ (PID 696) ΠΠΎΡΠΎΠΌΠΎΠΊ PID -800 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 7 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -800
Π‘ΠΈΠ³Π½Π°Π»Ρ Π½Π΅Π»ΡΠ·Ρ ΡΡΠΈΡΠ°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΌ ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ: Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ. ΠΠ°ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΡΠΏΡΠ°Π²ΠΈΠ² Π΅ΠΌΡ ΠΎΡΠΎΠ±ΡΠΉ Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠΈΠ³Π½Π°Π» ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ kill(0, $pid). ΠΡΠΎΡ Π²ΡΠ·ΠΎΠ² Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ°, Π½ΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΡΡΠΈΠ½Ρ (1), Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ "ΠΆΠΈΠ²", ΠΈ Π»ΠΎΠΆΡ (0), Π΅ΡΠ»ΠΈ ΠΎΠ½ Π·Π°Π²Π΅ΡΡΠΈΠ»ΡΡ ΠΈΠ»ΠΈ Π΅ΠΌΡ Π½Π΅Π»ΡΠ·Ρ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ. ΠΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Π°Ρ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° Π½ΡΠ»Π΅Π²ΠΎΠΉ ΡΠΈΠ³Π½Π°Π» Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ . ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΎΡΠΏΡΠ°Π²ΠΈΠ² Π΅ΠΌΡ ΡΠΈΠ³Π½Π°Π» KILL Π²ΡΠ·ΠΎΠ²ΠΎΠΌ kill(KILL, $pid).
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ Π²Π΅ΡΡΠΈΡΡ Perl ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ - Π»Π΅Π³ΠΊΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ (light-weight processes), Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½ΠΈΡΡΠΌΠΈ. (ΠΠΎ-Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈ ΡΡΠ°Π·Π° "Perl threads" Π·Π²ΡΡΠΈΡ ΠΊΠ°ΠΊ ΠΊΠ°Π»Π°ΠΌΠ±ΡΡ ΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½Π° ΠΊΠ°ΠΊ "Π½ΠΈΡΠΊΠΈ ΠΆΠ΅ΠΌΡΡΠ³Π°" ΠΈΠ»ΠΈ "ΠΆΠ΅ΠΌΡΡΠΆΠ½ΡΠ΅ ΠΎΠΆΠ΅ΡΠ΅Π»ΡΡ"). ΠΠΈΡΠΈ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΠΏΠΎΠ»Π½ΠΎΠ²Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Ρ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΡΠ΅ΡΡΡΡΠ°ΠΌΠΈ ΡΠ΅ΠΌ, ΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π½ΠΈΡΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΡΡΡΡΠ΅Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅ΠΉ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌ Π΄Π°Π½Π½ΡΠΌ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡΠΉ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΌΠΈΡΡ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ. ΠΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΠ»Π½ΠΎΠ²Π΅ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ, ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΌΠΈ Π½ΠΈΡΡΠΌΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠΈΡ. 16.1.
Π ΠΈΡ. 16.1. ΠΠΎΠ»Π½ΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΈ Π½ΠΈΡΠΈ (ΠΏΠΎΡΠΎΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ)