ΠΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ ΠΏΠ°ΠΌΡΡΠΈ, ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ (pipe), ΠΏΠΎΡΡΠ»Π°ΡΡ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΡΠΈΠ³Π½Π°Π»Ρ (signal), ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΊΠ΅ΡΡ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ (Inter-Process Communication, IPC). ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠ°ΠΊΠΈΡ -Π»ΠΈΠ±ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² Π΄ΡΡΠ³ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅: ΠΏΡΠΎ ΡΠ°ΠΊΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ (synchronous), ΡΠΎ Π΅ΡΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎ. Π Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ (asynchronous), ΡΠΎ Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°. Π ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΎΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎΠΌΡ, ΡΠΎ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΡΠΈΠ»ΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ·ΡΠΊΠ° Perl, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Ρ Π½Π° ΡΠ°Π±ΠΎΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΠΌΠ΅ΡΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Perl-ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ POSIX, ΠΈΠ»ΠΈ Π² ΠΠ‘ MS Windows. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ Π½Π°ΠΌ ΡΠ΄Π°ΡΡΡΡ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π° ΡΠ·ΡΠΊΠ° Perl, ΠΊΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠΉ ΡΠ΅ΠΌΡ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΡΠΈΠ²ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΡΠ΄Π΅Π»Π°Π½Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΡΠΌΠΈ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ, ΠΈΠ·Π±Π΅Π³Π°Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π Perl ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌΠΈ Π°ΠΏΠΎΡΡΡΠΎΡΠ°ΠΌΠΈ (backticks) ΠΈΠ»ΠΈ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌΠΎΠΌ - ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ qx(), ΡΠΏΠΎΠΌΠΈΠ½Π°Π²ΡΠ΅ΠΉΡΡ Π² Π»Π΅ΠΊΡΠΈΠΈ 7. ΠΠ½Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π»ΡΠ±ΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π² ΡΠ²ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Linux ΠΈΠ»ΠΈ MS Windows ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ dir, Π²ΡΠ²ΠΎΠ΄ΡΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΠΉΠ»ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅:
my $file_list = `dir`; # Π² ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ my @file_list = qx(dir); # Π² ΡΠΏΠΈΡΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅
Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ - ΡΠΊΠ°Π»ΡΡΠ½ΠΎΠΌ ΠΈΠ»ΠΈ ΡΠΏΠΈΡΠΎΡΠ½ΠΎΠΌ - ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ°Π±ΠΎΡΡ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½Π° ΡΡΡΠΎΠΊΠ° ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠΎΠΊ.
ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ system, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΠ΄ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ 0 ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π±ΡΠ»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ. ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π°ΡΡ ΠΈΠ²ΠΈΡΡΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ»Ρ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ .pl Π² ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅:
use English; # ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠΏΠ΅Ρ. ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ # Π² ΠΠ‘ MS Windows Π°ΡΡ ΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ pkzip if ($OSNAME =~ m/win/i) { system "pkzip", "-a", "pearls.zip", "*.pl"; # Π² ΠΠ‘ GNU/Linux Π°ΡΡ ΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΉΠ»Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ tar ΠΈ gzip } elsif ($OSNAME =~ m/linux/i) { system "tar -cv *.pl | gzip > pearls.tar.gz"; }
ΠΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΡ system() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ exec(), open() ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ qx(). ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π΅ΠΉ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ½Π° Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π²Π½Π΅ΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° (ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅). Π§ΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΠ΅ΠΉ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
{ # Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π² ΠΏΡΡΠΈ ΠΏΠΎΠΈΡΠΊΠ° local $ENV{"PATH"} = $path_to_the_program; # ΠΊΠ°ΡΠ°Π»ΠΎΠ³ system($program_to_execute); # Π²ΡΠ·ΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ } # Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ $ENV{"PATH"} Π±ΡΠ΄Π΅Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ open, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ Ρ ΡΡΠΈΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ open() Π²ΠΌΠ΅ΡΡΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ°ΠΉΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°Ρ ΡΡΡΠΎΠΊΠ° Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ Π΅Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ. ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ· Perl-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΎ ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° '|'. ΠΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ, Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ ΠΏΠ°ΡΠΎΠ»ΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π΄Π»Ρ ΡΠΆΠ°ΡΠΈΡ Π² Π°ΡΡ ΠΈΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ gzip:
# ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ open my $archive, "| gzip > passwords.gz"; for (my $i = 1; $i <= 12; $i++) { # Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ ΠΏΠ°ΡΠΎΠ»ΠΈ printf $archive "%06.0f\n", rand 999999; } close $archive; # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ
ΠΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΡΡΡ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² Perl-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΡΠΎ ΡΠΈΠΌΠ²ΠΎΠ» ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄ '|' ΡΡΠ°Π²ΠΈΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ:
# ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ ΠΎΡ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ open my $archive, "gzip -d < passwords.gz |"; while (my $line = <$archive>) { # ΡΠΈΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈΠ· Π°ΡΡ ΠΈΠ²Π° print $line; } close $archive; # Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ
(ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ Π°ΡΡ ΠΈΠ²Π°ΡΠΎΡ gzip ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ, Π²Π΅ΡΡΠΈΠΈ Π΄Π»Ρ ΡΠ°ΠΌΡΡ ΡΠ°Π·Π½ΡΡ ΠΠ‘ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π½Π° ΡΠ°ΠΉΡΠ΅ http://www.gzip.org.)
ΠΠ½ΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ: Π²Π½Π°ΡΠ°Π»Π΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½ΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅Π±Ρ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ exec, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΡ. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Perl-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ:
print "ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ: $0, PID:$$\n"; # Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠΊΠ°Π·Π°Π½Π½ΡΡ my $program = $ARGV[0]; # ΠΈΠΌΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² 1-ΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ΅ print "ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°: $program\n"; exec 'perl', $program or die; # Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ print "ΠΡΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ!\n";
ΠΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ 'proc_executed.pl' Π±ΡΠ΄ΡΡ Π²ΡΠ²Π΅Π΄Π΅Π½Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ:
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊ: proc_exec.pl, PID:652 ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°: proc_executed.pl ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°: proc_executed.pl, PID:1872
ΠΠ»Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π² Perl ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ fork ("ΡΠ°Π·Π²Π΅ΡΠ²ΠΈΡΡ"). Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΠΊΠΎΠΏΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠΎΠΆΠ΅ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° Unix ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΌΡ Π²ΡΠ·ΠΎΠ²Ρ fork. Π Π΄ΡΡΠ³ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ ΡΠ°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΈ fork() ΠΎΡΠ³Π°Π½ΠΈΠ·ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Perl. Π€ΡΠ½ΠΊΡΠΈΡ fork() Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ PID Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠΈΡΠ»ΠΎ 0 - Π² Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΡΡΠΎΠ±Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΡΠ΅Π΄ΠΊΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΠΎΡΠΎΠΌΠΊΠ΅. ΠΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°Π΅ΡΡΡ, ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΡ Π΅ΠΌΠ°ΡΠΈΡΠ½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ (Π³Π΄Π΅ ΠΎΠ±Π° ΠΏΡΠΎΡΠ΅ΡΡΠ° Π² ΡΠΈΠΊΠ»Π΅ Π²ΡΠ²ΠΎΠ΄ΡΡ ΡΠΈΡΠ»Π°, Π½ΠΎ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌΠΈ):
my $pid = fork(); # 'ΡΠ°Π·Π²Π΅ΡΠ²ΠΈΡΡ' ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ # fork Π²Π΅ΡΠ½Π΅Ρ 0 Π² ΠΏΠΎΡΠΎΠΌΠΊΠ΅ ΠΈ PID ΠΏΠΎΡΠΎΠΌΠΊΠ° Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΏΡΠ΅Π΄ΠΊΠ΅ die "fork Π½Π΅ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»: $!" unless defined $pid; unless ($pid) { # ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ print "ΠΠ°ΡΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID $$\n"; for (1..3) { print "ΠΠΎΡΠΎΠΌΠΎΠΊ PID $$ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ $_\n"; sleep 2; # 'Π·Π°ΡΠ½ΡΡΡ' Π½Π° 2 ΡΠ΅ΠΊΡΠ½Π΄Ρ } print "ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID $$\n"; exit; } if ($pid) { # ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΡΠ΅Π΄ΠΎΠΊ print "ΠΠ°ΡΠ°Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID $$\n"; for (1..3) { print "ΠΡΠ΅Π΄ΠΎΠΊ PID $$ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ $_\n"; sleep 1; # 'Π·Π°ΡΠ½ΡΡΡ' Π½Π° 1 ΡΠ΅ΠΊΡΠ½Π΄Ρ } # Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΆΠ΄Π°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ°: # print "ΠΡΠ΅Π΄ΠΎΠΊ PID $$ ΠΆΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ $pid\n"; # waitpid $pid, 0; print "ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID $$\n"; }
ΠΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ, Π²ΡΠ²ΠΎΠ΄ΠΈΠΌΡΠΌ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΈ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ waitpid(), ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ PID ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ° (Π° ΡΠ°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ). ΠΠΎ Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌ ΡΡΠ°Π²Π½ΠΈΡΠ΅ Π΄Π²Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ - Π±Π΅Π· ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°-ΠΏΠΎΡΠΎΠΌΠΊΠ° (Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ waitpid):
ΠΠ΅Π· ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠ° Π‘ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΠΏΠΎ waitpid() ---------------------------- -------------------------------- ΠΠ°ΡΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -1024 ΠΠ°ΡΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -1908 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1024 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1908 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΠ°ΡΠ°Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID 1504 ΠΠ°ΡΠ°Π»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID 1876 ΠΡΠ΅Π΄ΠΎΠΊ PID 1504 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΡΠ΅Π΄ΠΎΠΊ PID 1876 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 1 ΠΡΠ΅Π΄ΠΎΠΊ PID 1504 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΡΠ΅Π΄ΠΎΠΊ PID 1876 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1024 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1908 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 2 ΠΡΠ΅Π΄ΠΎΠΊ PID 1504 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΡΠ΅Π΄ΠΎΠΊ PID 1876 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID 1504 ΠΡΠ΅Π΄ΠΎΠΊ PID 1876 ΠΆΠ΄Π΅Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ -1908 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1024 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΠΎΡΠΎΠΌΠΎΠΊ PID -1908 ΡΠ°Π±ΠΎΡΠ°Π΅Ρ 3 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -1024 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΠΎΡΠΎΠΌΠΎΠΊ PID -1908 ΠΠ°ΠΊΠΎΠ½ΡΠΈΠ»ΡΡ ΠΏΡΠ΅Π΄ΠΎΠΊ PID 1876
ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ wait(), ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ PID Π·Π°Π²Π΅ΡΡΠΈΠ²ΡΠ΅Π³ΠΎΡΡ ΠΏΠΎΠ΄ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ -1, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ-ΠΏΠΎΡΠΎΠΌΠΊΠΈ Π·Π°Π²Π΅ΡΡΠΈΠ»ΠΈ ΡΠ°Π±ΠΎΡΡ.