เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

เปเบ™เบฐเบ™เบณเบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™

Hey Habr! เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบขเบฒเบเบˆเบฐเป€เบญเบปเบฒเบกเบฒเปƒเบซเป‰เบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก - เบเบฒเบ™เปเบ›เบ‚เบญเบ‡เบงเบฑเบ™เบ™เบฐเบ„เบฐเบ”เบตเบ—เบตเปˆเบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเปƒเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™เบ‚เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒ - OSTEP. เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เบชเบปเบ™เบ—เบฐเบ™เบฒเบขเปˆเบฒเบ‡เป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบท unix, เบ„เบท, เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เปˆเบฒเบ‡เป†, เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบ›เบฐเบเบญเบšเป€เบ›เบฑเบ™ OS เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเบ‚เบญเบ‡เบงเบฑเบ”เบชเบฐเบ”เบธเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบ™เบตเป‰ เบ—เบตเปˆเบ™เบตเป‰. เบเบฐเบฅเบธเบ™เบฒเบฎเบฑเบšเบŠเบฒเบšเบงเปˆเบฒเบเบฒเบ™เปเบ›เปเบกเปˆเบ™เป€เบฎเบฑเบ”เบšเปเปˆเป„เบ”เป‰เป€เบ›เบฑเบ™เบกเบทเบญเบฒเบŠเบตเบš (เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เป€เบชเบฅเบต), เปเบ•เปˆเบ‚เป‰เบญเบเบซเบงเบฑเบ‡เบงเปˆเบฒเบ‚เป‰เบญเบเบˆเบฐเบฎเบฑเบเบชเบฒเบ„เบงเบฒเบกเบซเบกเบฒเบเบ—เบปเปˆเบงเป„เบ›.

เบงเบฝเบเบ‡เบฒเบ™เบซเป‰เบญเบ‡เบ—เบปเบ”เบฅเบญเบ‡เบเปˆเบฝเบงเบเบฑเบšเป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบžเบปเบšเป„เบ”เป‰เบ—เบตเปˆเบ™เบตเป‰:

เบžเบฒเบเบชเปˆเบงเบ™เบญเบทเปˆเบ™เป†:

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบเป„เบ”เป‰เบ—เบตเปˆ เป‚เบ—เบฅเบฐเป€เบฅเบ =)

เบ›เบธเบ! เบกเบตเบซเป‰เบญเบ‡เบ—เบปเบ”เบฅเบญเบ‡เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบเบฒเบเบ™เบตเป‰! เป€เบšเบดเปˆเบ‡ github

API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบ™เบฅเบฐเบšเบปเบš UNIX. เบกเบฑเบ™เป€เบเบตเบ”เบ‚เบถเป‰เบ™เป‚เบ”เบเบœเปˆเบฒเบ™เบชเบญเบ‡เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš เบชเป‰เบญเบก () ะธ exec().

เบ›เบธเปˆเบกเบเบปเบ”()

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰ fork() เป‚เบ—. เบœเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹.

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

เบเปˆเบญเบ™โ€‹เบญเบทเปˆเบ™โ€‹เบซเบกเบปเบ”โ€‹, เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบซเบ™เป‰เบฒ main() เปเบฅเบฐโ€‹เบžเบดเบกโ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบดเบ‡โ€‹เบ—เบตเปˆโ€‹เบซเบ™เป‰เบฒโ€‹เบˆเปโ€‹เป„เบ”เป‰โ€‹. เป€เบชเบฑเป‰เบ™เบ›เบฐเบเบญเบšเบกเบตเบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบŠเบดเปˆเบ‡เปƒเบ™เบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบญเบฑเบเป€เบชเบšเบ—เป‰เบญเบ‡เบ™เป‰เบญเบ เบซเบผเบทเบ•เบปเบงเบฅเบฐเบšเบธเบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ•เบปเบงเบฅเบฐเบšเบธเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ UNIX เป€เบžเบทเปˆเบญเบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™. เบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบˆเบฐเป‚เบ—เบซเบฒ fork(). เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบชเปเบฒเป€เบ™เบปเบฒเป€เบเบทเบญเบšเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™. เบชเปเบฒเบฅเบฑเบš OS, เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบต 2 เบชเปเบฒเป€เบ™เบปเบฒเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบš, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบญเบญเบเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™ fork(). เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบเบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เปƒเบซเบกเปˆ (เบเปˆเบฝเบงเบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเปเปˆเปเบกเปˆเบ—เบตเปˆเบชเป‰เบฒเบ‡เบกเบฑเบ™) เบˆเบฐเบšเปเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบญเบตเบเบ•เปเปˆเป„เบ›, เป€เบฅเบตเปˆเบกเบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™ main(). เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบฅเบฐเบ™เบถเบเป€เบ–เบดเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เป€เบ”เบฑเบเบ™เป‰เบญเบเบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบชเปเบฒเป€เบ™เบปเบฒเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเปเปˆเปเบกเปˆเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบกเบฑเบ™เบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เบ—เบฐเบšเบฝเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡, เบ•เบปเบงเบŠเบตเป‰เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบเบฑเบšเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰, เปเบฅเบฐเบญเบทเปˆเบ™เป†. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบปเปˆเบ‡เบเบฑเบšเบœเบนเป‰เป‚เบ—เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ fork() เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเปเปˆเปเบกเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒ PID เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเป€เบ›เบฑเบ™เบœเบปเบ™เบ•เบญเบšเปเบ—เบ™, เปเบฅเบฐเป€เบ”เบฑเบเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเป€เบ—เบปเปˆเบฒเบเบฑเบš 0. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบเบฑเบšเบ„เบทเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบฅเบฐเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡. . เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ 2 เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, OS เป€เบฅเบตเปˆเบกเบ•เบดเบ”เบ•เบฒเบกเบžเบงเบเบกเบฑเบ™, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เบงเบฒเบ‡เปเบœเบ™เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบ–เป‰เบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเบนเปˆเปƒเบ™เป‚เบ›เป€เบŠเบ”เป€เบŠเบตเบ”เบฝเบง, เบซเบ™เบถเปˆเบ‡เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบžเปเปˆเปเบกเปˆเบˆเบฐเบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ„เบงเบšเบ„เบธเบก. เป€เบกเบทเปˆเบญเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปƒเบซเบกเปˆ, เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบญเบฒเบ”เบˆเบฐเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™.

เป‚เบ—เบฅเปเบ–เป‰เบฒ()

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป‚เบ„เบ‡เบเบฒเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰. เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบกเบตเบเบฒเบ™เป‚เบ— เบฅเปเบ–เป‰เบฒ() เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ‚เบญเบ‡เบžเปเปˆเปเบกเปˆเบˆเบฐเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบชเบณเป€เบฅเบฑเบ”เบชเบฐเป€เปเบต. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”เปƒเบ™เบซเบ™เป‰เบฒเบˆเป

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

exec() เป‚เบ—

เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™: เบชเบฒเบกเบŠเบดเป‰เบ™เบ‡เปˆเบฒเบ. เบชเปˆเบงเบ™เบ—เบต 3: API เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ (เบเบฒเบ™เปเบ›)

เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบ exec(). เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบšเบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบกเบปเบ”. เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป‚เบ—เบซเบฒ execvp() เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป‚เบ„เบ‡เบเบฒเบ™ wc เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ™เบฑเบšเบ„เปเบฒ. เบˆเบฐเป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เป€เบกเบทเปˆเบญ exec() เบ–เบทเบเป€เบญเบตเป‰เบ™? เบเบฒเบ™เป‚เบ—เบ™เบตเป‰เปเบกเปˆเบ™เบœเปˆเบฒเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เปเบฅเบฐเบšเบฒเบ‡เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเป€เบ›เบฑเบ™เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ”เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบ„เบปเบ‡เบ—เบตเปˆเบˆเบฒเบเป„เบŸเบฅเปŒเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเป‚เบซเบฅเบ”เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡เบ—เบตเปˆเบกเบตเบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ‚เบฝเบ™เบ—เบฑเบš. เบžเบทเป‰เบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญ, เป€เบŠเบฑเปˆเบ™ stack เปเบฅเบฐ heap, เปเบกเปˆเบ™ reinitialized. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, OS เบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™, เบœเปˆเบฒเบ™เบกเบฑเบ™เบŠเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบซเบกเปˆ, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบซเบฑเบ™เบ›เปˆเบฝเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™เบญเบทเปˆเบ™. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” exec() call เปƒเบ™ descendant, เบกเบฑเบ™โ€‹เบ›เบฐโ€‹เบเบปเบ”โ€‹เบงเปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”.

เบญเบฒเบเบฒเบ™เปเบŠเบเบŠเป‰เบญเบ™เปƒเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เป€เบฅเบทเปˆเบญเบ‡เบ›เบปเบเบเบฐเบ•เบดเบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบชเปเบฒเบฅเบฑเบš Unix shell, เปเบฅเบฐเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เปเบเบฐเบ™เบฑเป‰เบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบฅเบฐเบซเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เป‚เบ— เบชเป‰เบญเบก (), เปเบ•เปˆเบเปˆเบญเบ™เบเบฒเบ™เป‚เบ— exec(). เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฑเบšเบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ‚เบญเบ‡เปเบเบฐเบเบฑเบšเบ„เบงเบฒเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง.

Shell - เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบœเบนเป‰โ€‹เปƒเบŠเป‰โ€‹. เบ™เบฒเบ‡เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบ—เปˆเบฒเบ™เป€เบซเบฑเบ™เป€เบชเบฑเป‰เบ™เป€เบŠเบทเป‰เบญเป€เบŠเบตเบ™เปเบฅเบฐเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบ—เปˆเบฒเบ™เบ‚เบฝเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เปƒเบ™เบกเบฑเบ™. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ‚เบฝเบ™เบŠเบทเปˆเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™, shell เบˆเบฐเบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบกเบฑเบ™, เป‚เบ—เบซเบฒเบงเบดเบ—เบตเบเบฒเบ™ fork(), เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป‚เบ—เบซเบฒเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ exec() เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปƒเบซเบกเปˆเปเบฅเบฐเบฅเปเบ–เป‰เบฒเปƒเบซเป‰เบกเบฑเบ™เบชเปเบฒเป€เบฅเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ a. wait() เป‚เบ—. เป€เบกเบทเปˆเบญเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบญเบญเบเบˆเบฒเบ, เปเบเบฐเบˆเบฐเบเบฑเบšเบ„เบทเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เป‚เบ—เบซเบฒ wait() เปเบฅเบฐเบžเบดเบกเบเบฒเบ™เป€เบ•เบทเบญเบ™เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบฅเปเบ–เป‰เบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบˆเบฐเบ–เบทเบเบ›เป‰เบญเบ™.

เบเบฒเบ™เปเบšเปˆเบ‡เบ›เบฑเบ™ fork() & exec() เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰ shell เป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰, เบ•เบปเบงเบขเปˆเบฒเบ‡:
เป„เบŸเบฅเปŒ wc > new_file.

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰, เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ wc เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒเป„เบŸเบฅเปŒ. เบงเบดเบ—เบตเบ—เบตเปˆเบซเบญเบเบšเบฑเบ™เบฅเบธเป„เบ”เป‰เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ - เป‚เบ”เบเบเบฒเบ™เบชเป‰เบฒเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบ”เบฑเบเบ™เป‰เบญเบเบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒ exec(), เปเบเบฐเบ›เบดเบ”เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปเบฅเบฐเป€เบ›เบตเบ”เป„เบŸเบฅเปŒ new_file, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบˆเบฒเบเป‚เบ„เบ‡เบเบฒเบ™เปเบฅเปˆเบ™เบ•เปเปˆเป„เบ› wc เบˆเบฐเบ–เบทเบเบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเป„เบŸเบฅเปŒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบˆเป.

เบ—เปเปˆ Unix เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, เบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบ‚เบปเบฒเปƒเบŠเป‰เบ—เปเปˆ () เป‚เบ—. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เบเบฐเปเบชเบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบˆเบฐเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเปเบ–เบงเบ—เปเปˆเบ—เบตเปˆเบขเบนเปˆเปƒเบ™ kernel, เป€เบŠเบดเปˆเบ‡เบเบฐเปเบชเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™เบˆเบฐเบ–เบทเบเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™