#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 ΠΏΡΠΎΡΠ΅ΡΡΡ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π΅Π³ΠΎ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠ½ΠΎΠ²Π»Π΅Π½Π½ΡΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°ΡΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ exit ΠΈ wait ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄Π½Π° Π½Π΅ΡΠ΅ΡΠ΅Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΡΠ²ΡΠ·Π°Π½Π½Π°Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅, Π½Π΅Π»ΡΠ·Ρ ΡΠ±ΠΈΡΠ°ΡΡ ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΈΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ wait. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π» ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², Π½ΠΎ ΡΠ°ΠΊ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠ» ΡΡΠ½ΠΊΡΠΈΡ wait, ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΈΠ·-Π·Π° Π½Π°Π»ΠΈΡΠΈΡ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ², ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ exit. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅ΠΊΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π½Π° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.18. ΠΡΠΎΡΠ΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ ΠΊΠΎΠ½Π΅Ρ ΡΠ°ΠΉΠ»Π°, ΡΠΎΠ·Π΄Π°Π²Π°Ρ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ read Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΡΠΎΡΠ΅ΡΡ-ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΌΠΊΠ°, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ ΡΡΡΠ΅ΠΌΠΈΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅. ΠΡΠ»ΠΈ, ΠΎΠ±ΡΠ°ΡΠΈΠ²ΡΠΈΡΡ ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ signal, ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°ΡΠΏΠΎΡΡΠ΄ΠΈΠ»ΡΡ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ ΡΠΈΠΏΠ° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠ°Β», ΡΠ΄ΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΎΡΠΈΡΠ°ΡΡ Π·Π°ΠΏΠΈΡΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΠ²ΡΠΈΠΌ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΠ½Π°ΡΠ΅ Π² ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΠΈΡΠΎΠ³Π΅ ΠΈΠ·-Π·Π° ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΡΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡΡ.
#include βΉsignal.hβΊ
main(argc, argv) {
char buf[256];
if (argc != 1) signal(SIGCLD, SIG_IGN); /* ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ² */
while (read(0, buf, 256))
if (fork() == 0) {
/* Π·Π΄Π΅ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ-ΠΏΠΎΡΠΎΠΌΠΎΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π°Π΄ Π±ΡΡΠ΅ΡΠΎΠΌ (buf) */
exit(0);
}
}
Π ΠΈΡΡΠ½ΠΎΠΊ 7.18. ΠΡΠΈΠΌΠ΅Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° Β«Π³ΠΈΠ±Π΅Π»Ρ ΠΏΠΎΡΠΎΠΌΠΊΠΎΠ²Β»
7.5 ΠΠ«ΠΠΠ ΠΠ Π£ΠΠΠ₯ ΠΠ ΠΠΠ ΠΠΠ
Π‘ΠΈΡΡΠ΅ΠΌΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ exec Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π΄ΡΡΠ³ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΡΠ°ΠΉΠ» Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°. Π‘ΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΠ΄ΡΠΎΠΌ ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π² Π½ΠΎΠ²ΠΎΠ΅. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ:
execve(filename, argv, envp)
Π³Π΄Π΅ filename β ΠΈΠΌΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, argv β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π° envp β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ·ΠΎΠ² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ exec ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ execl, execv, execle ΠΈ Ρ. Π΄. Π ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
main(argc, argv),
ΠΌΠ°ΡΡΠΈΠ² argv ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΠΎΠ΄Π½ΠΎΠΈΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ exec. Π‘ΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΠΌΠ΅ΡΡ Π²ΠΈΠ΄ Β«ΠΈΠΌΡ=Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅Β» ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ ΠΏΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠΎΡΠ΅ΡΡΡ ΠΌΠΎΠ³ΡΡ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ environ, ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π²ΠΎΠ΄ΠΈΡ Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ° Π‘ΠΈ-ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
Π°Π»Π³ΠΎΡΠΈΡΠΌ exec
Π²Ρ ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
(1) ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°
(2) ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²
(3) ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅Π΄Ρ
Π²ΡΡ ΠΎΠ΄Π½Π°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ: ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ
{
ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ°ΠΉΠ»Π° (Π°Π»Π³ΠΎΡΠΈΡΠΌ namei);
ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ°ΠΉΠ» ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ°Π²ΠΎ Π½Π° Π΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅;
ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΡΠ°ΠΉΠ»Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ;
ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΠ· ΡΡΠ°ΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ;
for (ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π½ΠΎΠΉ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΡ)
ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ Π²ΡΠ΅ ΡΡΠ°ΡΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ (Π°Π»Π³ΠΎΡΠΈΡΠΌ detachreg);
for (ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ Π² Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅) {
Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ (Π°Π»Π³ΠΎΡΠΈΡΠΌ allocreg);
ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΠΈ (Π°Π»Π³ΠΎΡΠΈΡΠΌ attachreg);
Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΠΎΠ±Π»Π°ΡΡΡ Π² ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ (Π°Π»Π³ΠΎΡΠΈΡΠΌ loadreg);
}
ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π² Π½ΠΎΠ²ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΡΡΠ΅ΠΊΠ° Π·Π°Π΄Π°ΡΠΈ;
ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π»Ρ setuid-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ°;
ΠΏΡΠΎΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±Π»Π°ΡΡΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² Π·Π°Π΄Π°ΡΠΈ (Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΆΠΈΠΌ Π·Π°Π΄Π°ΡΠΈ);
ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ ΡΠ°ΠΉΠ»Π° (Π°Π»Π³ΠΎΡΠΈΡΠΌ iput);
}
Π ΠΈΡΡΠ½ΠΎΠΊ 7.19. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ exec
ΠΠ° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.19 ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ exec. Π‘Π½Π°ΡΠ°Π»Π° ΡΡΠ½ΠΊΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΏΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ namei, ΠΏΡΠΎΠ²Π΅ΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ°ΠΉΠ» ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΌ ΠΈ ΠΎΡΠ»ΠΈΡΠ½ΡΠΌ ΠΎΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΏΡΠ°Π²Π° ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠ΄ΡΠΎ, ΡΡΠΈΡΡΠ²Π°Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΡΠ°ΠΉΠ»Π°, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π² ΡΠ°ΠΉΠ»Π΅ (ΡΠΎΡΠΌΠ°Ρ ΡΠ°ΠΉΠ»Π°).
ΠΠ° Π ΠΈΡΡΠ½ΠΊΠ΅ 7.20 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΎΡΠΌΠ°Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅, ΠΎΠ±ΡΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΡΠ°Π½ΡΠ»ΡΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ Π·Π°Π³ΡΡΠ·ΡΠΈΠΊΠΎΠΌ. ΠΠ½ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΡΠ΅ΡΡΡΠ΅ ΡΠ°ΡΡΠΈ:
1. ΠΠ»Π°Π²Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΠΌ, Π½Π° ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² Π΄Π΅Π»ΠΈΡΡΡ ΡΠ°ΠΉΠ», Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ Π°Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Β«ΠΌΠ°Π³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΈΡΠ»ΠΎΒ», ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠ΅Π΅ ΡΠΈΠΏ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°.
2. ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΎΠ², ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·Π΄Π΅Π» Π² ΡΠ°ΠΉΠ»Π΅: Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ, Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ°, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ½ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΠΈ Π΄Ρ.
3. Π Π°Π·Π΄Π΅Π»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Β«Π΄Π°Π½Π½ΡΠ΅Β» ΡΠ°ΠΉΠ»Π° (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅), ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π² Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°.
4. Π Π°Π·Π΄Π΅Π»Ρ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ ΡΠΌΠ΅ΡΠ°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠ² ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
Π ΠΈΡΡΠ½ΠΎΠΊ 7.20. ΠΠ±ΡΠ°Π· ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°
Π£ΠΊΠ°Π·Π°Π½Π½ΡΠ΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ Ρ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΡΠ°ΠΌΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΎ Π²ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»Π°Ρ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π³Π»Π°Π²Π½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Ρ ΠΏΠΎΠ»Π΅ΠΌ ΡΠΈΠΏΠ° ΡΠ°ΠΉΠ»Π°.
Π’ΠΈΠΏ ΡΠ°ΠΉΠ»Π° ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅ΡΡΡ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌ ΡΠ΅Π»ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ (ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π΅ ΠΏΠΎΠ»ΡΡΠ»ΠΎΠ²ΠΎΠΌ), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΠ°ΠΉΠ» ΠΊΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ, Π΄Π°Π²Π°Ρ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠ΄ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΌΠ°ΡΠΈΠ½Π΅ PDP 11/70 ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° ΡΠ°ΠΉΠ»Π° ΠΊΠ°ΠΊ Π·Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΡΠ΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ ΡΠ°ΠΉΠ», ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΠΎ 128 ΠΠ±Π°ΠΉΡ ΠΏΠ°ΠΌΡΡΠΈ Π²ΠΌΠ΅ΡΡΠΎ 64 ΠΠ±Π°ΠΉΡ[22], ΡΠ΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ Π·Π°ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡ ΡΠΈΠΏ ΡΠ°ΠΉΠ»Π° Π²ΡΠ΅ Π΅ΡΠ΅ ΠΈΠ³ΡΠ°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΡΠΎΠ»Ρ, Π² ΡΠ΅ΠΌ Π½Π°ΠΌ ΠΏΡΠ΅Π΄ΡΡΠΎΠΈΡ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ Π³Π»Π°Π²ΠΎΠΉ 9.
ΠΠ΅ΡΠ½Π΅ΠΌΡΡ ΠΊ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ. ΠΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΡΠ΄ΡΠΎ ΠΎΠ±ΡΠ°ΡΠΈΠ»ΠΎΡΡ ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΎ, ΡΡΠΎ ΡΠ°ΠΉΠ» ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΠΌΡΠΌ. Π―Π΄ΡΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ Π±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΠΏΠ°ΠΌΡΡΡ, Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠ΅ΠΉ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π½ΠΎΠ²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΠ΄ΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΌ Π΄Π΅Π»ΠΎΠΌ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ ΠΈΡ ΠΈΠ· Π°Π΄ΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° Π² ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΠΉ Π±ΡΡΠ΅Ρ Π½Π° Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΡΠ²Π΅Π΄Π΅Π½Ρ ΠΎΠ±Π»Π°ΡΡΠΈ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ exec Π²ΡΡΡΡΠΏΠ°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΡ ΡΡΡΠΎΠΊ, ΡΠ΄ΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ ΠΏΠ°ΠΌΡΡΡ Π°Π΄ΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°ΠΌΡ ΡΡΡΠΎΠΊΡ. ΠΠ»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ Π² ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²ΡΠ±ΡΠ°Π½Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ°. Π§Π°ΡΠ΅ ΠΏΡΠΈΠ½ΡΡΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΡΡΠΎΠΊΠΈ Π² ΡΡΠ΅ΠΊΠ΅ ΡΠ΄ΡΠ° (Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°ΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΡΠ΄ΡΠ°), Π½Π° Π½Π΅ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΡ ΡΡΠ°ΡΡΠΊΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ (ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΈΡΡ), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ, Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ (Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ Π²ΡΠ³ΡΡΠ·ΠΊΠΈ).