home *** CD-ROM | disk | FTP | other *** search
Text File | 1991-11-05 | 197.6 KB | 3,279 lines |
-
-
- âïÇéÇ 7
-
- EôÅÉÇéïàìêà ÅÉÄûàææÄîF
-
-
-
-
- é »αÑñδñπΘÑ⌐ ú½áóÑ íδ½ αáßß¼«ΓαÑ¡ ¬«¡ΓѬßΓ »α«µÑßßá ¿ «»¿ßá¡δ á½ú«α¿Γ¼δ
- ñ½∩ αáí«Γδ ß ¡¿¼; ó ñá¡¡«⌐ ú½áóÑ αÑτ∞ »«⌐ñÑΓ «í ¿ß»«½∞º«óá¡¿¿ ¿ αÑ὿ºáµ¿¿
- ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐, π»αáó½∩εΘ¿σ ¬«¡ΓѬßΓ«¼ »α«µÑßßá. æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ fork
- ß«ºñáÑΓ ¡«óδ⌐ »α«µÑßß, Σπ¡¬µ¿∩ exit ºáóÑαΦáÑΓ óδ»«½¡Ñ¡¿Ñ »α«µÑßßá, á wait
- ñáÑΓ ó«º¼«ª¡«ßΓ∞ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ ß¿¡σα«¡¿º¿α«óáΓ∞ ßó«Ñ »α«ñ«½ªÑ¡¿Ñ ß
- ºáóÑαΦÑ¡¿Ñ¼ »«α«ªñÑ¡¡«ú« »α«µÑßßá. Äí áß¿¡σα«¡¡δσ ß«íδΓ¿∩σ »α«µÑßßδ ¿¡Σ«α¼¿-
- απεΓß∩ »α¿ »«¼«Θ¿ ß¿ú¡á½«ó. ū߬«½∞¬π ∩ñα« ß¿¡σα«¡¿º¿απÑΓ óδ»«½¡Ñ¡¿Ñ Σπ¡¬µ¿⌐
- exit ¿ wait »α¿ »«¼«Θ¿ ß¿ú¡á½«ó, «»¿ßá¡¿Ñ ¼Ñσá¡¿º¼á ß¿ú¡á½«ó »αÑñóáα∩ÑΓ ß«-
- í«⌐ αáßß¼«ΓαÑ¡¿Ñ Σπ¡¬µ¿⌐ exit ¿ wait. æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ exec ñáÑΓ »α«µÑßßπ
- 󫺼«ª¡«ßΓ∞ ºá»π߬áΓ∞ "¡«óπε" »α«úαá¼¼π, ¡á¬½áñδóá∩ ÑÑ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó«
- ¡á ¿ß»«½¡∩Ѽδ⌐ «íαẠΣá⌐½á. æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ brk »«ºó«½∩ÑΓ ñ¿¡á¼¿τÑ߬¿ óδ-
- ñѽ∩Γ∞ ñ«»«½¡¿Γѽ∞¡πε »á¼∩Γ∞; ΓѼ¿ ªÑ ßá¼δ¼¿ ßαÑñßΓóἿ ∩ñα« ñ¿¡á¼¿τÑ߬¿ ¡á-
- αáΘ¿óáÑΓ ßΓѬ ºáñáτ¿, óδñѽ∩∩ ó ß½πτáÑ ¡Ñ«íσ«ñ¿¼«ßΓ¿ ñ«»«½¡¿Γѽ∞¡«Ñ »α«ßΓ-
- αá¡ßΓó«. é ºá¬½ετ¿Γѽ∞¡«⌐ τáßΓ¿ ú½áóδ ñáÑΓß∩ ¬αáΓ¬«Ñ «»¿ßá¡¿Ñ «ß¡«ó¡δσ úαπ»»
- «»Ñαᵿ⌐ ¬«¼á¡ñ¡«ú« »α«µÑßß«αá shell ¿ ¡áτá½∞¡«ú« »α«µÑßßá init.
- ìá É¿ßπ¡¬Ñ 7.1 »«¬áºá¡á óºá¿¼«ßó∩º∞ ¼Ñªñπ ß¿ßΓѼ¡δ¼¿ Σπ¡¬µ¿∩¼¿, αáßß¼áΓ-
- α¿óáÑ¼δ¼¿ ó ñá¡¡«⌐ ú½áóÑ, ß «ñ¡«⌐ ßΓ«α«¡δ, ¿ á½ú«α¿Γ¼á¼¿, «»¿ßá¡¡δ¼¿ ó »αÑ-
- ñδñπΘÑ⌐ ú½áóÑ, ß ñαπú«⌐. Å«τΓ¿ ó« óßÑσ Σπ¡¬µ¿∩σ ¿ß»«½∞ºπεΓß∩ á½ú«α¿Γ¼δ sleep
- ¿ wakeup, «ΓßπΓßΓóπεΘ¿Ñ ¡á α¿ßπ¡¬Ñ. öπ¡¬µ¿∩ exec, ¬α«¼Ñ Γ«ú«, óºá¿¼«ñÑ⌐ßΓóπ-
- ÑΓ ß á½ú«α¿Γ¼á¼¿ αáí«Γδ ß Σá⌐½«ó«⌐ ß¿ßΓѼ«⌐, αÑτ∞ « ¬«Γ«αδσ Φ½á ó ú½áóáσ 4 ¿
- 5.
-
- ┌─────────────────────────────┬─────────────────────┬────────────┐
- │ æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿, ¿¼ÑεΘ¿Ñ │ æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿, │ öπ¡¬µ¿¿ │
- │ εΘ¿Ñ ñѽ« ß π»αáó½Ñ¡¿Ñ¼ »á- │ ßó∩ºá¡¡δÑ ß ß¿¡σα«- │ ß¼ÑΦá¡¡«ú« │
- │ ¼∩Γ∞ε │ ¡¿ºáµ¿Ñ⌐ │ Γ¿»á │
- ├───────┬───────┬───────┬─────┴──┬────┬──────┬────┬─┴─────┬──────┤
- │ fork │ exec │ brk │ exit │wait│signal│kill│setrgrp│setuid│
- ├───────┼───────┼───────┼────────┼────┴──────┴────┴───────┴──────┤
- │dupreg │detach-│growreg│ detach-│ │
- │attach-│ reg │ │ reg │ │
- │ reg │alloc- │ │ │ │
- │ │ reg │ │ │ │
- │ │attach-│ │ │ │
- │ │ reg │ │ │ │
- │ │growreg│ │ │ │
- │ │loadreg│ │ │ │
- │ │mapreg │ │ │ │
- └───────┴───────┴───────┴────────┴───────────────────────────────┘
-
- É¿ßπ¡«¬ 7.1. æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ π»αáó½Ñ¡¿∩ »α«µÑßß«¼ ¿ ¿σ
- ßó∩º∞ ß ñαπú¿¼¿ á½ú«α¿Γ¼á¼¿
-
-
-
- E7.1 æÄçäÇìêà ÅÉÄûàææÇF
-
- àñ¿¡ßΓóÑ¡¡δ¼ ß»«ß«í«¼ ß«ºñá¡¿∩ »«½∞º«óáΓѽѼ ¡«ó«ú« »α«µÑßßá ó «»Ñαᵿ-
- «¡¡«⌐ ß¿ßΓÑ¼Ñ UNIX ∩ó½∩ÑΓß∩ óδ»«½¡Ñ¡¿Ñ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ fork. Åα«µÑßß, óδ-
- ºδóáεΘ¿⌐ Σπ¡¬µ¿ε fork, ¡áºδóáÑΓß∩ α«ñ¿Γѽ∞߬¿¼ (»α«µÑßß-α«ñ¿Γѽ∞), ó¡«ó∞
- ß«ºñáóáѼδ⌐ »α«µÑßß ¡áºδóáÑΓß∩ »«α«ªñÑ¡¡δ¼ (»α«µÑßß-»«Γ«¼«¬). æ¿¡Γá¬ß¿ß óδ-
- º«óá Σπ¡¬µ¿¿ fork:
-
- 179
-
- pid = fork();
- é αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ fork »«½∞º«óáΓѽ∞߬¿⌐ ¬«¡ΓѬßΓ ¿ Γ«ú«, ¿
- ñαπú«ú« »α«µÑßß«ó ß«ó»áñáÑΓ ó« óßѼ, ¬α«¼Ñ ó«ºóαáΘáѼ«ú« º¡áτÑ¡¿∩ »ÑαѼѡ¡«⌐
- pid. ä½∩ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ó pid ó«ºóαáΘáÑΓß∩ ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«α«ªñÑ¡¡«-
- ú« »α«µÑßßá, ñ½∩ »«α«ªñÑ¡¡«ú« - pid ¿¼ÑÑΓ ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ. ìπ½Ñó«⌐ »α«µÑßß,
- 󫺡¿¬áεΘ¿⌐ ó¡πΓα¿ ∩ñαá »α¿ ºáúαπº¬Ñ ß¿ßΓѼδ, ∩ó½∩ÑΓß∩ Ññ¿¡ßΓóÑ¡¡δ¼ »α«µÑß-
- ß«¼, ¡Ñ ß«ºñáóáÑ¼δ¼ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ fork.
- é σ«ñÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ∩ñα« »α«¿ºó«ñ¿Γ ß½ÑñπεΘπε »«ß½Ññ«óáΓѽ∞¡«ßΓ∞
- ñÑ⌐ßΓó¿⌐:
- 1. ÄΓó«ñ¿Γ ¼ÑßΓ« ó Γáí½¿µÑ »α«µÑßß«ó »«ñ ¡«óδ⌐ »α«µÑßß.
- 2. Åα¿ßóá¿óáÑΓ »«α«ªñáѼ«¼π »α«µÑßßπ π¡¿¬á½∞¡δ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿.
- 3. äѽáÑΓ ½«ú¿τÑ߬πε ¬«»¿ε ¬«¡ΓѬßΓá α«ñ¿Γѽ∞߬«ú« »α«µÑßßá. ū߬«½∞¬π ΓÑ
- ¿½¿ ¿¡δÑ ß«ßΓáó½∩εΘ¿Ñ »α«µÑßßá, Γá¬¿Ñ ¬á¬ «í½áßΓ∞ ¬«¼á¡ñ, ¼«úπΓ αáºñÑ-
- ½∩Γ∞ß∩ ñαπú¿¼¿ »α«µÑßßἿ, ∩ñα« ¼«ªÑΓ ¿¡«úñá ó¼ÑßΓ« ¬«»¿α«óá¡¿∩ «í½áßΓ¿
- ó ¡«óδ⌐ Σ¿º¿τÑ߬¿⌐ πτáßΓ«¬ »á¼∩Γ¿ »α«ßΓ« πóѽ¿τ¿Γ∞ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á
- ßß佫¬ ¡á «í½áßΓ∞.
- 4. ôóѽ¿τ¿óáÑΓ º¡áτÑ¡¿∩ ßτÑΓτ¿¬á τ¿ß½á Σá⌐½«ó, ßó∩ºá¡¡δσ ß »α«µÑßß«¼, ¬á¬ ó
- Γáí½¿µÑ Σá⌐½«ó, Γᬠ¿ ó Γáí½¿µÑ ¿¡ñѬ߫ó.
- 5. 髺óαáΘáÑΓ α«ñ¿Γѽ∞߬«¼π »α«µÑßß𠬫ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«α«ªñÑ¡¡«ú« »α«µÑß-
- ßá, á »«α«ªñÑ¡¡«¼π »α«µÑßßπ - ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ.
-
- ÉÑ὿ºáµ¿ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ fork, »«ªá½π⌐, ¡Ñ½∞º∩ ¡áºóáΓ∞ Γα¿ó¿á½∞¡«⌐,
- Γᬠ¬á¬ »«α«ªñÑ¡¡δ⌐ »α«µÑßß ¡áτ¿¡áÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ, 󫺡¿¬á∩ ¬á¬ íδ ¿º
- ó«ºñπσá. ǽú«α¿Γ¼ αÑ὿ºáµ¿¿ Σπ¡¬µ¿¿ ñ½∩ ß¿ßΓѼ ß ºá¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ »« ºá»-
- α«ßπ ¿ ñ½∩ ß¿ßΓѼ ß »«ñ¬áτ¬«⌐ »α«µÑßß«ó ¿¼ÑÑΓ ½¿Φ∞ ¡Ñº¡áτ¿Γѽ∞¡δÑ αẽ¿τ¿∩;
- óßÑ ¿º½«ªÑ¡¡«Ñ ¡¿ªÑ ó «Γ¡«ΦÑ¡¿¿ φΓ«ú« á½ú«α¿Γ¼á ¬áßáÑΓß∩ ó »Ñαóπε «τÑαÑñ∞
- Γαáñ¿µ¿«¡¡δσ ß¿ßΓѼ ß »«ñ¬áτ¬«⌐ »α«µÑßß«ó, ¡« ß ¡Ñ»αѼѡ¡δ¼ á¬µÑ¡Γ¿α«ó᡿Ѽ
- 󡿼᡿∩ ¡á ΓÑσ ¼«¼Ñ¡Γáσ, ¬«Γ«αδÑ ó ß¿ßΓѼáσ ß ºá¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ »« ºá»α«ßπ
- αÑ὿ºπεΓß∩ ¿¡áτÑ. èα«¼Ñ Γ«ú«, ¬«¡Ñτ¡«, »αÑñ»«½áúáÑΓß∩, τΓ« ó ß¿ßΓÑ¼Ñ ¿¼ÑÑΓ-
- ß∩ ßó«í«ñ¡á∩ «»ÑαáΓ¿ó¡á∩ »á¼∩Γ∞, ñ«ßΓáΓ«τ¡á∩ ñ½∩ αẼÑΘÑ¡¿∩ »«α«ªñÑ¡¡«ú«
- »α«µÑßßá. é ú½áóÑ 9 íπñÑΓ «Γñѽ∞¡« αáßß¼«ΓαÑ¡ ß½πτá⌐, ¬«úñá ñ½∩ »«α«ªñÑ¡¡«ú«
- »α«µÑßßá ¡Ñ σóáΓáÑΓ »á¼∩Γ¿, ¿ Γá¼ ªÑ íπñπΓ ñá¡δ αáºΩ∩ߡѡ¿∩ «Γ¡«ß¿Γѽ∞¡« αÑ-
- ὿ºáµ¿¿ á½ú«α¿Γ¼á fork ó ß¿ßΓѼáσ ß ºá¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ.
- ìá É¿ßπ¡¬Ñ 7.2 »α¿óÑñÑ¡ á½ú«α¿Γ¼ ß«ºñá¡¿∩ »α«µÑßßá. æ¡áτá½á ∩ñα« ñ«½ª¡«
- πñ«ßΓ«óÑα¿Γ∞ß∩ ó Γ«¼, τΓ« ñ½∩ πß»ÑΦ¡«ú« óδ»«½¡Ñ¡¿∩ á½ú«α¿Γ¼á fork ÑßΓ∞ óßÑ
- ¡Ñ«íσ«ñ¿¼δÑ αÑßπαßδ. é ß¿ßΓÑ¼Ñ ß »«ñ¬áτ¬«⌐ »α«µÑßß«ó ñ½∩ αẼÑΘÑ¡¿∩ »«α«ªñá-
- Ѽ«ú« »α«µÑßßá ΓαÑíπÑΓß∩ ¼ÑßΓ« ½¿í« ó »á¼∩Γ¿, ½¿í« ¡á ñ¿ß¬Ñ; ó ß¿ßΓÑ¼Ñ ß ºá-
- ¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ ß½ÑñπÑΓ óδñѽ¿Γ∞ »á¼∩Γ∞ ñ½∩ óß»«¼«úáΓѽ∞¡δσ Γáí½¿µ (ó τáßΓ-
- ¡«ßΓ¿, Γáí½¿µ ßΓαá¡¿µ). àß½¿ ßó«í«ñ¡δσ αÑßπαß«ó ¡ÑΓ, á½ú«α¿Γ¼ fork ºáóÑαΦá-
- ÑΓß∩ ¡Ñπñáτ¡«. ƒñα« ¿ΘÑΓ ¼ÑßΓ« ó Γáí½¿µÑ »α«µÑßß«ó ñ½∩ ¬«¡ßΓαπ¿α«óá¡¿∩ ¬«¡-
- ΓѬßΓá »«α«ªñáѼ«ú« »α«µÑßßá ¿ »α«óÑα∩ÑΓ, ¡Ñ »αÑóδß¿½ ½¿ »«½∞º«óáΓѽ∞, óδ-
- »«½¡∩εΘ¿⌐ fork, «úαá¡¿τÑ¡¿Ñ ¡á ¼á¬ß¿¼á½∞¡«-ñ«»πßΓ¿¼«Ñ ¬«½¿τÑßΓó« »áαώѽ∞¡«
- ºá»πΘÑ¡¡δσ »α«µÑßß«ó. ƒñα« Γá¬ªÑ »«ñí¿αáÑΓ ñ½∩ ¡«ó«ú« »α«µÑßßá π¡¿¬á½∞¡δ⌐
- ¿ñÑ¡Γ¿Σ¿¬áΓ«α, º¡áτÑ¡¿Ñ ¬«Γ«α«ú« »αÑóδΦáÑΓ ¡á Ññ¿¡¿µπ ¼á¬ß¿¼á½∞¡δ⌐ ¿º ßπΘÑß-
- ΓóπεΘ¿σ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó. àß½¿ »αÑñ½áúáѼδ⌐ ¿ñÑ¡Γ¿Σ¿¬áΓ«α πªÑ »α¿ßó«Ñ¡ ñαπú«-
- ¼π »α«µÑßßπ, ∩ñα« íÑαÑΓ ¿ñÑ¡Γ¿Σ¿¬áΓ«α, ß½ÑñπεΘ¿⌐ »« »«α∩ñ¬π. èá¬ Γ«½∞¬« íπ-
- ñÑΓ ñ«ßΓ¿ú¡πΓ« ¼á¬ß¿¼á½∞¡«-ñ«»πßΓ¿¼«Ñ º¡áτÑ¡¿Ñ, «ΓßτÑΓ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó «»∩Γ∞
- ¡áτ¡ÑΓß∩ ß 0. ū߬«½∞¬π í«½∞Φ¿¡ßΓó« »α«µÑßß«ó ¿¼ÑÑΓ ¬«α«Γ¬«Ñ óαѼ∩ ª¿º¡¿,
- »α¿ »ÑαÑσ«ñÑ ¬ ¡áτá½π «ΓßτÑΓá º¡áτ¿Γѽ∞¡á∩ τáßΓ∞ ¿ñÑ¡Γ¿Σ¿¬áΓ«α«ó «¬áºδóáÑΓß∩
- ßó«í«ñ¡«⌐.
- ìá ¬«½¿τÑßΓó« «ñ¡«óαѼѡ¡« óδ»«½¡∩εΘ¿σß∩ »α«µÑßß«ó ¡á¬½áñδóáÑΓß∩ «úαá¡¿-
- τÑ¡¿Ñ (¬«¡Σ¿úπα¿απѼ«Ñ), «Γßεñá ¡¿ «ñ¿¡ ¿º »«½∞º«óáΓѽÑ⌐ ¡Ñ ¼«ªÑΓ ºá¡¿¼áΓ∞ ó
- Γáí½¿µÑ »α«µÑßß«ó ß½¿Φ¬«¼ ¼¡«ú« ¼ÑßΓá, ¼ÑΦá∩ ΓѼ ßá¼δ¼ ñαπú¿¼ »«½∞º«óáΓѽ∩¼
- ß«ºñáóáΓ∞ ¡«óδÑ »α«µÑßßδ. èα«¼Ñ Γ«ú«, »α«ßΓδ¼ »«½∞º«óáΓѽ∩¼ ¡Ñ αáºαÑΦáÑΓß∩
- ß«ºñáóáΓ∞ »α«µÑßß, ºá¡¿¼áεΘ¿⌐ »«ß½Ññ¡ÑÑ ßó«í«ñ¡«Ñ ¼ÑßΓ« ó Γáí½¿µÑ »α«µÑßß«ó,
- ó »α«Γ¿ó¡«¼ ß½πτáÑ ß¿ßΓÑ¼á ºáΦ½á íδ ó Γπ»¿¬. äαπú¿¼¿ ß½«óἿ, »«ß¬«½∞¬π ó
- Γáí½¿µÑ »α«µÑßß«ó ¡ÑΓ ßó«í«ñ¡«ú« ¼ÑßΓá, Γ« ∩ñα« ¡Ñ ¼«ªÑΓ úáαá¡Γ¿α«óáΓ∞, τΓ«
- óßÑ ßπΘÑßΓóπεΘ¿Ñ »α«µÑßßδ ºáóÑαΦáΓß∩ ÑßΓÑßΓóÑ¡¡δ¼ «íαẫ¼, »«φΓ«¼π ¡«óδÑ
-
-
- 180
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ fork │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ñ½∩ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá - ¿ñÑ¡Γ¿Σ¿-│
- │ ¬áΓ«α (PID) »«α«ªñÑ¡¡«ú« »α«µÑßßá │
- │ ñ½∩ »«α«ªñÑ¡¡«ú« »α«µÑßßá - 0 │
- │ { │
- │ »α«óÑα¿Γ∞ ñ«ßΓπ»¡«ßΓ∞ αÑßπαß«ó ∩ñαá; │
- │ »«½πτ¿Γ∞ ßó«í«ñ¡«Ñ ¼ÑßΓ« ó Γáí½¿µÑ »α«µÑßß«ó ¿ π¡¿¬á½∞- │
- │ ¡δ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ (PID); │
- │ »α«óÑα¿Γ∞, ¡Ñ ºá»πßΓ¿½ ½¿ »«½∞º«óáΓѽ∞ ß½¿Φ¬«¼ ¼¡«ú« │
- │ »α«µÑßß«ó; │
- │ ßñѽáΓ∞ »«¼ÑΓ¬π « Γ«¼, τΓ« »«α«ªñáѼδ⌐ »α«µÑßß ¡áσ«ñ¿Γß∩│
- │ ó ß«ßΓ«∩¡¿¿ "ß«ºñá¡¿∩"; │
- │ ߬«»¿α«óáΓ∞ ¿¡Σ«α¼áµ¿ε ó Γáí½¿µÑ »α«µÑßß«ó ¿º ºá»¿ß¿, │
- │ ß««ΓóÑΓßΓóπεΘÑ⌐ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ, ó ºá»¿ß∞, ß««Γ-│
- │ óÑΓßΓóπεΘπε »«α«ªñÑ¡¡«¼π »α«µÑßßπ; │
- │ πóѽ¿τ¿Γ∞ º¡áτÑ¡¿∩ ßτÑΓτ¿¬«ó ßß佫¬ ¡á ΓѬπΘ¿⌐ ¬áΓὫú ¿│
- │ ¡á ¬«α¡Ñó«⌐ ¬áΓὫú (Ñß½¿ «¡ íδ½ ¿º¼Ñ¡Ñ¡); │
- │ πóѽ¿τ¿Γ∞ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á «Γ¬αδΓ¿⌐ Σá⌐½á ó Γáí½¿µÑ │
- │ Σá⌐½«ó; │
- │ ßñѽáΓ∞ ¬«»¿ε ¬«¡ΓѬßΓá α«ñ¿Γѽ∞߬«ú« »α«µÑßßá (áñαÑß¡«Ñ│
- │ »α«ßΓαá¡ßΓó«, ¬«¼á¡ñδ, ñá¡¡δÑ, ßΓѬ) ó »á¼∩Γ¿; │
- │ »«¼ÑßΓ¿Γ∞ ó ßΓѬ Σ¿¬Γ¿ó¡δ⌐ πα«óÑ¡∞ ß¿ßΓѼ¡«ú« ¬«¡ΓѬßΓá │
- │ ¡áñ πα«ó¡Ñ¼ ß¿ßΓѼ¡«ú« ¬«¡ΓѬßΓá, ß««ΓóÑΓßΓóπεΘ¿¼ »«- │
- │ ᫪ñÑ¡¡«¼π »α«µÑßßπ; │
- │ Σ¿¬Γ¿ó¡δ⌐ ¬«¡ΓѬßΓ¡δ⌐ πα«óÑ¡∞ ß«ñÑαª¿Γ ¿¡Σ«α¼áµ¿ε, │
- │ ¡Ñ«íσ«ñ¿¼πε »«α«ªñÑ¡¡«¼π »α«µÑßßπ ñ½∩ Γ«ú«, τΓ«íδ │
- │ º¡áΓ∞ óßÑ « ßÑíÑ ¿ íπñπτ¿ óδíαá¡¡δ¼ ñ½∩ ¿ß»«½¡Ñ¡¿∩ │
- │ ºá»π߬áΓ∞ß∩ ß φΓ«ú« ¼ÑßΓá; │
- │ Ñß½¿ (ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ óδ»«½¡∩ÑΓß∩ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß) │
- │ { │
- │ »ÑαÑóÑßΓ¿ »«α«ªñÑ¡¡δ⌐ »α«µÑßß ó ß«ßΓ«∩¡¿Ñ "ú«Γ«ó¡«ßΓ¿│
- │ ¬ óδ»«½¡Ñ¡¿ε"; │
- │ ó«ºóαáΓ¿Γ∞ (¿ñÑ¡Γ¿Σ¿¬áΓ«α »«α«ªñÑ¡¡«ú« »α«µÑßßá); │
- │ /* ¿º ß¿ßΓÑ¼δ »«½∞º«óáΓѽε */ │
- │ } │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ /* óδ»«½¡∩ÑΓß∩ »«α«ªñÑ¡¡δ⌐ │
- │ »α«µÑßß */ │
- │ { │
- │ ºá»¿ßáΓ∞ ¡áτá½∞¡δÑ º¡áτÑ¡¿∩ ó »«½∩ ß¿¡σα«¡¿ºáµ¿¿ áñ- │
- │ αÑß¡«ú« »α«ßΓαá¡ßΓóá »α«µÑßßá; │
- │ ó«ºóαáΓ¿Γ∞ (0); /* »«½∞º«óáΓѽε */ │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.2. ǽú«α¿Γ¼ fork
-
-
- »α«µÑßßδ ß«ºñáóáΓ∞ß∩ ¡Ñ íπñπΓ. æ ñαπú«⌐ ßΓ«α«¡δ, ßπ»Ñα»«½∞º«óáΓÑ½ε ¡πª¡«
- ñáΓ∞ 󫺼«ª¡«ßΓ∞ ¿ß»«½¡∩Γ∞ ßΓ«½∞¬« »α«µÑßß«ó, ߬«½∞¬« Ñ¼π »«ΓαÑíπÑΓß∩, ¬«-
- ¡Ñτ¡«, πτ¿Γδóá∩ αẼÑα Γáí½¿µδ »α«µÑßß«ó, »α¿ φΓ«¼ »α«µÑßß, ¿ß»«½¡∩Ѽδ⌐ ßπ-
- »Ñα»«½∞º«óáΓѽѼ, ¼«ªÑΓ ºá¡∩Γ∞ ó Γáí½¿µÑ ¿ »«ß½Ññ¡ÑÑ ßó«í«ñ¡«Ñ ¼ÑßΓ«. ÅαÑñ-
- »«½áúáÑΓß∩, τΓ« ßπ»Ñα»«½∞º«óáΓѽ∞ ¼«ªÑΓ »α¿íÑúáΓ∞ ¬ αÑΦ¿Γѽ∞¡δ¼ ¼Ñαá¼ ¿ ºá-
- »π߬áΓ∞ »α«µÑßß, »«íπªñáεΘ¿⌐ «ßΓá½∞¡δÑ »α«µÑßßδ ¬ ºáóÑαΦÑ¡¿ε, Ñß½¿ φΓ« óδºδ-
- óáÑΓß∩ ¡Ñ«íσ«ñ¿¼«ßΓ∞ε (ß¼. αáºñѽ 7.2.3, úñÑ ú«ó«α¿Γß∩ « ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿
- kill).
- çáΓѼ ∩ñα« »α¿ßóá¿óáÑΓ ¡áτá½∞¡δÑ º¡áτÑ¡¿∩ αẽ¿τ¡δ¼ »«½∩¼ ºá»¿ß¿ Γáí½¿µδ
-
- 181
-
- »α«µÑßß«ó, ß««ΓóÑΓßΓóπεΘÑ⌐ »«α«ªñÑ¡¡«¼π »α«µÑßßπ, ¬«»¿απ∩ ó ¡¿σ º¡áτÑ¡¿∩ »«-
- ½Ñ⌐ ¿º ºá»¿ß¿ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá. ìá»α¿¼Ñα, »«α«ªñÑ¡¡δ⌐ »α«µÑßß "¡áß½Ñ-
- ñπÑΓ" π α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ (αÑá½∞¡δ⌐ ¿
- Γ«Γ, »«ñ ¬«Γ«αδ¼ ¿ß»«½¡∩ÑΓß∩ »α«µÑßß), úαπ»»π »α«µÑßß«ó, π»αáó½∩Ѽπε α«ñ¿-
- Γѽ∞߬¿¼ »α«µÑßß«¼, á Γá¬ªÑ º¡áτÑ¡¿Ñ, ºáñá¡¡«Ñ α«ñ¿Γѽ∞߬¿¼ »α«µÑßß«¼ ó Σπ¡-
- ¬µ¿¿ nice ¿ ¿ß»«½∞ºπѼ«Ñ »α¿ óδτ¿ß½Ñ¡¿¿ »α¿«α¿ΓÑΓá »½á¡¿α«óá¡¿∩. é ß½ÑñπεΘ¿σ
- αáºñѽáσ ¼δ »«ú«ó«α¿¼ « ¡áº¡áτÑ¡¿¿ φΓ¿σ »«½Ñ⌐. ƒñα« »ÑαÑñáÑΓ º¡áτÑ¡¿Ñ »«½∩
- ¿ñÑ¡Γ¿Σ¿¬áΓ«αá α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ó ºá»¿ß∞ »«α«ªñÑ¡¡«ú«, ó¬½ετá∩ »«ß½Ññ-
- ¡¿⌐ ó ñαÑó«ó¿ñ¡πε ßΓαπ¬Γπαπ »α«µÑßß«ó, ¿ »α¿ßóá¿óáÑΓ ¡áτá½∞¡δÑ º¡áτÑ¡¿∩ αáº-
- ½¿τ¡δ¼ »áαá¼ÑΓαá¼ »½á¡¿α«óá¡¿∩, Γᬿ¼ ¬á¬ »α¿«α¿ΓÑΓ »½á¡¿α«óá¡¿∩, ¿ß»«½∞º«-
- óá¡¿Ñ αÑßπαß«ó µÑ¡Γαá½∞¡«ú« »α«µÑßß«αá ¿ ñαπú¿Ñ º¡áτÑ¡¿∩ »«½Ñ⌐ ß¿¡σα«¡¿ºá-
- µ¿¿. ìáτá½∞¡δ¼ ß«ßΓ«∩¡¿Ñ¼ »α«µÑßßá ∩ó½∩ÑΓß∩ ß«ßΓ«∩¡¿Ñ "ß«ºñá¡¿∩" (ß¼. É¿ßπ-
- ¡«¬ 6.1).
- Å«ß½Ñ Γ«ú« ∩ñα« πßΓá¡áó½¿óáÑΓ º¡áτÑ¡¿∩ ßτÑΓτ¿¬«ó ßß佫¬ ¡á Σá⌐½δ, ß ¬«-
- Γ«α묨 áóΓ«¼áΓ¿τÑ߬¿ ßó∩ºδóáÑΓß∩ »«α«ªñáѼδ⌐ »α«µÑßß. é«-»Ñαóδσ, »«α«ªñÑ¡¡δ⌐
- »α«µÑßß αẼÑΘáÑΓß∩ ó ΓѬπΘѼ ¬áΓὫúÑ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá. ù¿ß½« »α«µÑß-
- ß«ó, «íαáΘáεΘ¿σß∩ ó ñá¡¡δ⌐ ¼«¼Ñ¡Γ ¬ ¬áΓὫúπ, πóѽ¿τ¿óáÑΓß∩ ¡á 1 ¿, ß««ΓóÑΓ-
- ßΓóÑ¡¡«, πóѽ¿τ¿óáÑΓß∩ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á Ñú« ¿¡ñѬß. é«-óΓ«αδσ,
- Ñß½¿ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ¿½¿ «ñ¿¡ ¿º Ñú« »αÑñ¬«ó πªÑ óδ»«½¡∩½ ß¼Ñ¡π ¬«α¡Ñ-
- ó«ú« ¬áΓὫúá ß »«¼«Θ∞ε Σπ¡¬µ¿¿ chroot, »«α«ªñÑ¡¡δ⌐ »α«µÑßß ¡áß½ÑñπÑΓ ¿ ¡«-
- óδ⌐ ¬«αÑ¡∞ ß ß««ΓóÑΓßΓóπεΘ¿¼ πóѽ¿τÑ¡¿Ñ¼ º¡áτÑ¡¿∩ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡ñѬß
- ¬«α¡∩. ìᬫ¡Ñµ, ∩ñα« »α«ß¼áΓα¿óáÑΓ Γáí½¿µπ »«½∞º«óáΓѽ∞߬¿σ ñÑß¬α¿»Γ«α«ó ñ½∩
- α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ó »«¿ß¬áσ «Γ¬αδΓδσ Σá⌐½«ó, ¿ºóÑßΓ¡δσ »α«µÑßßπ, ¿ πóÑ-
- ½¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬, áßß«µ¿¿α«óá¡¡«ú« ß ¬áªñδ¼ ¿º «Γ¬αδΓδσ
- Σá⌐½«ó, ó ú½«íá½∞¡«⌐ Γáí½¿µÑ Σá⌐½«ó. Å«α«ªñÑ¡¡δ⌐ »α«µÑßß ¡Ñ »α«ßΓ« ¡áß½ÑñπÑΓ
- »αáóá ñ«ßΓπ»á ¬ «Γ¬αδΓδ¼ Σá⌐½á¼, ¡« ¿ αáºñѽ∩ÑΓ ñ«ßΓπ» ¬ Σá⌐½á¼ ß α«ñ¿Γѽ∞-
- ߬¿¼ »α«µÑßß«¼, Γᬠ¬á¬ «íá »α«µÑßßá «íαáΘáεΓß∩ ó Γáí½¿µÑ Σá⌐½«ó ¬ «ñ¡¿¼ ¿
- ΓѼ ªÑ ºá»¿ß∩¼. äÑ⌐ßΓó¿Ñ fork ó «Γ¡«ΦÑ¡¿¿ «Γ¬αδΓδσ Σá⌐½«ó »«ñ«í¡« ñÑ⌐ßΓó¿ε
- á½ú«α¿Γ¼á dup: ¡«óá∩ ºá»¿ß∞ ó Γáí½¿µÑ »«½∞º«óáΓѽ∞߬¿σ ñÑß¬α¿»Γ«α«ó Σá⌐½á
- π¬áºδóáÑΓ ¡á ºá»¿ß∞ ó ú½«íá½∞¡«⌐ Γáí½¿µÑ Σá⌐½«ó, ß««ΓóÑΓßΓóπεΘπε «Γ¬αδΓ«¼π
- Σá⌐½π. ä½∩ dup, «ñ¡á¬«, ºá»¿ß¿ ó Γáí½¿µÑ »«½∞º«óáΓѽ∞߬¿σ ñÑß¬α¿»Γ«α«ó Σá⌐½á
- «Γ¡«ß∩Γß∩ ¬ «ñ¡«¼π »α«µÑßßπ; ñ½∩ fork - ¬ αáº¡δ¼ »α«µÑßßá¼.
- Å«ß½Ñ ºáóÑαΦÑ¡¿∩ óßÑσ φΓ¿σ ñÑ⌐ßΓó¿⌐ ∩ñα« ú«Γ«ó« ¬ ß«ºñá¡¿ε ñ½∩ »«α«ªñÑ¡-
- ¡«ú« »α«µÑßßá »«½∞º«óáΓѽ∞߬«ú« ¬«¡ΓѬßΓá. ƒñα« óδñѽ∩ÑΓ »á¼∩Γ∞ ñ½∩ áñαÑß¡«-
- ú« »α«ßΓαá¡ßΓóá »α«µÑßßá, Ñú« «í½áßΓÑ⌐ ¿ Γáí½¿µ ßΓαá¡¿µ, ß«ºñáÑΓ ß »«¼«Θ∞ε
- á½ú«α¿Γ¼á dupreg ¬«»¿¿ óßÑσ «í½áßΓÑ⌐ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ¿ »α¿ß«Ññ¿¡∩ÑΓ ß
- »«¼«Θ∞ε á½ú«α¿Γ¼á attachreg ¬áªñπε «í½áßΓ∞ ¬ »«α«ªñÑ¡¡«¼π »α«µÑßßπ. é ß¿ßΓÑ-
- ¼Ñ ß »«ñ¬áτ¬«⌐ »α«µÑßß«ó ∩ñα« ¬«»¿απÑΓ ß«ñÑন¼«Ñ «í½áßΓÑ⌐, ¡Ñ ∩ó½∩εΘ¿σß∩
- «í½áßΓ∩¼¿ αáºñѽ∩Ѽ«⌐ »á¼∩Γ¿, ó ¡«óπε º«¡π «»ÑαáΓ¿ó¡«⌐ »á¼∩Γ¿. éß»«¼¡¿¼ ¿º
- αáºñѽá 6.2.4 « Γ«¼, τΓ« ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá σαá¡¿Γß∩ π¬áºáΓѽ∞ ¡á ß««Γ-
- óÑΓßΓóπεΘπε ºá»¿ß∞ ó Γáí½¿µÑ »α«µÑßß«ó. çá ¿ß¬½ετÑ¡¿Ñ¼ φΓ«ú« »«½∩, ó« óßѼ
- «ßΓá½∞¡«¼ ß«ñÑন¼«Ñ áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »«α«ªñÑ¡¡«ú« »α«µÑßßá ó ¡áτá½Ñ
- ß«ó»áñáÑΓ ß ß«ñÑন¼δ¼ »α«ßΓαá¡ßΓóá α«ñ¿Γѽ∞߬«ú« »α«µÑßßá, ¡« ¼«ªÑΓ αáßσ«-
- ñ¿Γ∞ß∩ »«ß½Ñ ºáóÑαΦÑ¡¿∩ á½ú«α¿Γ¼á fork. É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß, ¡á»α¿¼Ñα, »«ß-
- ½Ñ óδ»«½¡Ñ¡¿∩ fork ¼«ªÑΓ «Γ¬αδΓ∞ ¡«óδ⌐ Σá⌐½, ¬ ¬«Γ«α«¼π »«α«ªñÑ¡¡δ⌐ »α«µÑßß
- πªÑ ¡Ñ »«½πτ¿Γ ñ«ßΓπ» áóΓ«¼áΓ¿τÑ߬¿.
- êΓá¬, ∩ñα« ºáóÑαΦ¿½« ß«ºñá¡¿Ñ ßΓáΓ¿τÑ߬«⌐ τáßΓ¿ ¬«¡ΓѬßΓá »«α«ªñÑ¡¡«ú«
- »α«µÑßßá; ΓÑ»Ñα∞ «¡« »α¿ßΓπ»áÑΓ ¬ ß«ºñá¡¿ε ñ¿¡á¼¿τÑ߬«⌐ τáßΓ¿. ƒñα« ¬«»¿απÑΓ
- ó ¡ÑÑ »Ñαóδ⌐ ¬«¡ΓѬßΓ¡δ⌐ πα«óÑ¡∞ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá, ó¬½ετáεΘ¿⌐ ó ßÑí∩
- ß«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ ºáñáτ¿ ¿ ßΓѬ ∩ñαá ó ¼«¼Ñ¡Γ ó맮óá Σπ¡¬µ¿¿
- fork. àß½¿ ó ñá¡¡«⌐ αÑ὿ºáµ¿¿ ßΓѬ ∩ñαá ∩ó½∩ÑΓß∩ τáßΓ∞ε »α«ßΓαá¡ßΓóá »α«-
- µÑßßá, ∩ñα« ó ¼«¼Ñ¡Γ ß«ºñá¡¿∩ »α«ßΓαá¡ßΓóá »«α«ªñÑ¡¡«ú« »α«µÑßßá áóΓ«¼áΓ¿-
- τÑ߬¿ ß«ºñáÑΓ ¿ ß¿ßΓѼ¡δ⌐ ßΓѬ ñ½∩ ¡Ñú«. é »α«Γ¿ó¡«¼ ß½πτáÑ α«ñ¿Γѽ∞߬«¼π
- »α«µÑßßπ »α¿ñÑΓß∩ ߬«»¿α«óáΓ∞ ó »α«ßΓαá¡ßΓó« »á¼∩Γ¿, áßß«µ¿¿α«óá¡¡«Ñ ß »«-
- ᫪ñÑ¡¡δ¼ »α«µÑßß«¼, ßó«⌐ ß¿ßΓѼ¡δ⌐ ßΓѬ. é ½εí«¼ ß½πτáÑ ßΓѬ ∩ñαá ñ½∩ »«-
- ᫪ñÑ¡¡«ú« »α«µÑßßá ß«ó»áñáÑΓ ß ß¿ßΓѼ¡δ¼ ßΓѬ«¼ Ñú« α«ñ¿Γѽ∩. äá½ÑÑ ∩ñα«
- ß«ºñáÑΓ ñ½∩ »«α«ªñÑ¡¡«ú« »α«µÑßßá Σ¿¬Γ¿ó¡δ⌐ ¬«¡ΓѬßΓ¡δ⌐ πα«óÑ¡∞ (2), ó ¬«Γ«-
- α«¼ ß«ñÑনΓß∩ ß«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ ¿º »Ñαó«ú« ¬«¡ΓѬßΓ¡«ú«
- πα«ó¡∩. ç¡áτÑ¡¿∩ ßτÑΓτ¿¬á ¬«¼á¡ñ (αÑú¿ßΓα PC) ¿ ñαπú¿σ αÑú¿ßΓα«ó, ß«σαá¡∩Ñ-
-
- 182
-
- ¼δÑ ó αÑú¿ßΓα«ó«¼ ¬«¡ΓѬßΓÑ, πßΓá¡áó½¿óáεΓß∩ Γᬿ¼ «íαẫ¼, τΓ«íδ ß ¿σ »«-
- ¼«Θ∞ε ¼«ª¡« í佫 "ó«ßßΓá¡áó½¿óáΓ∞" ¬«¡ΓѬßΓ »«α«ªñÑ¡¡«ú« »α«µÑßßá, »πßΓ∞ ñá-
- ªÑ »«ß½Ññ¡¿⌐ ÑΘÑ ¡¿ αáºπ ¡Ñ ¿ß»«½¡∩½ß∩, ¿ τΓ«íδ φëà »α«µÑßß »α¿ ºá»π߬Ñ
- óßÑúñá »«¼¡¿½ « Γ«¼, τΓ« «¡ »«α«ªñÑ¡¡δ⌐. ìá»α¿¼Ñα, Ñß½¿ »α«úαá¼¼á ∩ñαá »α«-
- óÑα∩ÑΓ º¡áτÑ¡¿Ñ, σαá¡∩ΘÑÑß∩ ó αÑú¿ßΓαÑ 0, ñ½∩ Γ«ú«, τΓ«íδ óδ∩ß¡¿Γ∞, ∩ó½∩ÑΓß∩
- ½¿ ñá¡¡δ⌐ »α«µÑßß α«ñ¿Γѽ∞߬¿¼ ¿½¿ ªÑ »«α«ªñÑ¡¡δ¼, Γ« φΓ« º¡áτÑ¡¿Ñ »ÑαÑ»¿ßδ-
- óáÑΓß∩ ó αÑú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ »«α«ªñÑ¡¡«ú« »α«µÑßßá, ß«σαá¡Ñ¡¡δ⌐ ó ß«ßΓáóÑ
- »Ñαó«ú« πα«ó¡∩. îÑσá¡¿º¼ ß«σαá¡Ñ¡¿∩ ¿ß»«½∞ºπÑΓß∩ ëà ªÑ, τΓ« ¿ »α¿ »ÑαѬ½ε-
- τÑ¡¿¿ ¬«¡ΓѬßΓá (ß¼. »αÑñδñπΘπε ú½áóπ).
-
- É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß
- ┌─────────────────────────────────────────────┐ Æáí½¿µá
- │ ┌─────────┐ ùáßΓ¡á∩ ÇñαÑß¡«Ñ »α«ßΓαá¡- │ Σá⌐½«ó
- │ │ Äí½áßΓ∞ │ Γáí½¿µá ßΓó« »α«µÑßßá │ ┌─────────┐
- │ │ ñá¡¡δσ │ «í½áßΓÑ⌐ ┌──────────────────┐│ │ ∙ │
- │ └─────────┘ »α«µÑßßá │ ÄΓ¬αδΓδÑ Σá⌐½δ ─∙││∙─ ┐ │ ∙ │
- │ │ ┌──────┐ │ ││ ∙ │ ∙ │
- │ ∙─ ─ ─ ┐ │ ├ ┐│ ÆÑ¬πΘ¿⌐ ¬áΓὫú ─││┐ │ ├─────────┤
- │ ∙ ├──────┤ ∙│ ││∙ ∙─ ─│ │
- │ ┌─────────┐ └ ┤ │ ││ 꺼ѡѡ¡δ⌐ ¬«αÑ¡∞│││ │ │ │
- │ │ æΓѬ │ ├──────┤ ∙└──────────────────┘│∙ ∙ ├─────────┤
- │ │ ºáñáτ¿ ├ ─ ┤ │ │┌──────────────────┐││ │ │ ∙ │
- │ └─────────┘ └──────┘ ∙│ ∙ ││∙ ∙ │ ∙ │
- │ ││ ∙ │││ │ │ ∙ │
- │ ∙│ ∙ ││∙ ∙ ├─────────┤
- │ ∙─ ─ ─ ─ ─ ─ ─ ─ ─┘│ æΓѬ ∩ñαá │││ ├ ─ ┤ │
- │ │ └──────────────────┘│∙ ∙ │ │
- └─────────────────────────────────────────────┘│ │ ├─────────┤
- ∙ ∙ ∙ │ ∙ │
- ┌────┴────┐ │ │ │ ∙ │
- │Éáºñѽ∩Ñ-│ ∙ ∙ │ ∙ │
- │ ¼á∩ │ │ │ ├─────────┤
- │ «í½áßΓ∞ │ ∙ ∙─ ─│ │
- │ ¬«¼á¡ñ │ │ │ │ │
- └────┬────┘ ∙ ∙ ├─────────┤
- ∙ │ │ └─────────┘
- └ ─ ─ ─ ─ ─ ─ ─ ─ ┐ ∙ ∙
- ┌─────────────────────────────────────────────┐└ ─│┐ Æáí½¿µá
- │ ┌─────────┐ ùáßΓ¡á∩ │ ÇñαÑß¡«Ñ »α«ßΓαá¡- │ ∙∙ Σá⌐½«ó
- │ │ Äí½áßΓ∞ │ Γáí½¿µá ∙ ßΓó« »α«µÑßßá │ ││ ┌─────────┐
- │ │ ñá¡¡δσ │ «í½áßΓÑ⌐ │┌──────────────────┐│ ∙∙ │ ∙ │
- │ └─────────┘ »α«µÑßßá ∙│ ÄΓ¬αδΓδÑ Σá⌐½δ ─∙││∙─ ┘│ │ ∙ │
- │ │ ┌──────┐ ││ ││ ∙ │ ∙ │
- │ ∙─ ─ ─ ┐ │ ├─∙│ ÆÑ¬πΘ¿⌐ ¬áΓὫú ─││┐ │ ├─────────┤
- │ ∙ ├──────┤ │ ││∙ ∙─ ┤ │
- │ ┌─────────┐ └ ┤ │ │ 꺼ѡѡ¡δ⌐ ¬«αÑ¡∞││└ ─ ─ ─│ │
- │ │ æΓѬ │ ├──────┤ └──────────────────┘│ ├─────────┤
- │ │ ºáñáτ¿ ├ ─ ┤ │ ┌──────────────────┐│ │ ∙ │
- │ └─────────┘ └──────┘ │ ∙ ││ │ ∙ │
- │ │ ∙ ││ ├─────────┤
- │ │ æΓѬ ∩ñαá ││ │ │
- │ └──────────────────┘│ │ │
- └─────────────────────────────────────────────┘ ├─────────┤
- Å«α«ªñÑ¡¡δ⌐ »α«µÑßß │ ∙ │
- │ ∙ │
- └─────────┘
-
- É¿ßπ¡«¬ 7.3. 櫺ñá¡¿Ñ ¬«¡ΓѬßΓá ¡«ó«ú« »α«µÑßßá »α¿ óδ»«½¡Ñ-
- ¡¿¿ Σπ¡¬µ¿¿ fork
-
- 183
-
-
- àß½¿ ¬«¡ΓѬßΓ »«α«ªñÑ¡¡«ú« »α«µÑßßá ú«Γ«ó, α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ºáóÑαΦá-
- ÑΓ ßó«ε α«½∞ ó óδ»«½¡Ñ¡¿¿ á½ú«α¿Γ¼á fork, »ÑαÑó«ñ∩ »«α«ªñÑ¡¡δ⌐ »α«µÑßß ó
- ß«ßΓ«∩¡¿Ñ "ú«Γ«ó¡«ßΓ¿ ¬ ºá»π߬π, ¡áσ«ñ∩ß∞ ó »á¼∩Γ¿" ¿ ó«ºóαáΘá∩ »«½∞º«óáΓѽε
- Ñú« ¿ñÑ¡Γ¿Σ¿¬áΓ«α. çáΓѼ, ¿ß»«½∞ºπ∩ «íδτ¡δ⌐ á½ú«α¿Γ¼ »½á¡¿α«óá¡¿∩, ∩ñα« óδ-
- í¿αáÑΓ »«α«ªñÑ¡¡δ⌐ »α«µÑßß ñ½∩ ¿ß»«½¡Ñ¡¿∩ ¿ ëà "ñ«¿úαδóáÑΓ" ßó«ε α«½∞ ó á½-
- ú«α¿Γ¼Ñ fork. è«¡ΓѬßΓ »«α«ªñÑ¡¡«ú« »α«µÑßßá íδ½ ºáñá¡ α«ñ¿Γѽ∞߬¿¼ »α«µÑß-
- ß«¼; ß Γ«τ¬¿ ºαÑ¡¿∩ ∩ñαá ¬áªÑΓß∩, τΓ« »«α«ªñÑ¡¡δ⌐ »α«µÑßß ó«º«í¡«ó½∩ÑΓß∩
- »«ß½Ñ »α¿«ßΓá¡«óá ó «ª¿ñá¡¿¿ αÑßπαßá. Å«α«ªñÑ¡¡δ⌐ »α«µÑßß »α¿ óδ»«½¡Ñ¡¿¿
- Σπ¡¬µ¿¿ fork αÑ὿ºπÑΓ Γπ τáßΓ∞ »α«úαá¼¼δ, ¡á ¬«Γ«απε π¬áºδóáÑΓ ßτÑΓτ¿¬ ¬«-
- ¼á¡ñ, ó«ßßΓá¡áó½¿óáѼδ⌐ ∩ñα«¼ ¿º ß«σαá¡Ñ¡¡«ú« ¡á πα«ó¡Ñ 2 αÑú¿ßΓα«ó«ú« ¬«¡-
- ΓѬßΓá, ¿ »« óδσ«ñÑ ¿º Σπ¡¬µ¿¿ ó«ºóαáΘáÑΓ ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ.
- ìá É¿ßπ¡¬Ñ 7.3 »αÑñßΓáó½Ñ¡á ½«ú¿τÑ߬á∩ ßσѼá óºá¿¼«ñÑ⌐ßΓó¿∩ α«ñ¿Γѽ∞߬«-
- ú« ¿ »«α«ªñÑ¡¡«ú« »α«µÑßß«ó ß ñαπú¿¼¿ ßΓαπ¬ΓπαἿ ñá¡¡δσ ∩ñαá ßαáºπ »«ß½Ñ
- ºáóÑαΦÑ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ fork. êΓá¬, «íá »α«µÑßßá ß«ó¼ÑßΓ¡« »«½∞ºπεΓß∩
- Σá⌐½á¼¿, ¬«Γ«αδÑ í뫨 «Γ¬αδΓδ α«ñ¿Γѽ∞߬¿¼ »α«µÑßß«¼ ¬ ¼«¼Ñ¡Γπ ¿ß»«½¡Ñ¡¿∩
- Σπ¡¬µ¿¿ fork, »α¿ φΓ«¼ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¬áªñδ⌐ ¿º φΓ¿σ Σá⌐½«ó ó
- Γáí½¿µÑ Σá⌐½«ó ¡á Ññ¿¡¿µπ í«½∞ΦÑ, τѼ ñ« ó맮óá Σπ¡¬µ¿¿. Å«α«ªñÑ¡¡δ⌐ »α«µÑßß
- ¿¼ÑÑΓ ΓÑ ªÑ, τΓ« ¿ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß, ΓѬπΘ¿⌐ ¿ ¬«α¡Ñó«⌐ ¬áΓὫú¿, º¡áτÑ-
- ¡¿Ñ ªÑ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡ñÑ¬ß ¬áªñ«ú« ¿º φΓ¿σ ¬áΓὫú«ó ΓᬠªÑ ßΓá¡«ó¿Γß∩
- ¡á Ññ¿¡¿µπ í«½∞ΦÑ, τѼ ñ« ó맮óá Σπ¡¬µ¿¿. æ«ñÑন¼«Ñ «í½áßΓÑ⌐ ¬«¼á¡ñ, ñá¡¡δσ
- ¿ ßΓѬá (ºáñáτ¿) π «í«¿σ »α«µÑßß«ó ß«ó»áñáÑΓ; »« Γ¿»π «í½áßΓ¿ ¿ óÑαß¿¿ ß¿ß-
- ΓѼ¡«⌐ αÑ὿ºáµ¿¿ ¼«ª¡« πßΓá¡«ó¿Γ∞, ¼«úπΓ ½¿ »α«µÑßßδ αáºñѽ∩Γ∞ ßá¼π «í½áßΓ∞
- ¬«¼á¡ñ ó Σ¿º¿τÑ߬¿σ áñαÑßáσ.
- Éáßß¼«Γα¿¼ »α¿óÑñÑ¡¡πε ¡á É¿ßπ¡¬Ñ 7.4 »α«úαá¼¼π, ¬«Γ«αá∩ »αÑñßΓáó½∩ÑΓ
- ß«í«⌐ »α¿¼Ñα αáºñѽѡ¿∩ ñ«ßΓπ»á ¬ Σá⌐½π »α¿ ¿ß»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ fork. Å«½∞º«-
- óáΓѽε ß½ÑñπÑΓ »ÑαÑñáóáΓ∞ φΓ«⌐ »α«úαá¼¼Ñ
- ñóá »áαá¼ÑΓαá - ¿¼∩ ßπΘÑßΓóπεΘÑú« Σá⌐½á ¿ ¿¼∩ ß«ºñáóáѼ«ú« Σá⌐½á. Åα«µÑßß
- «Γ¬αδóáÑΓ ßπΘÑßΓóπεΘ¿⌐ Σá⌐½, ß«ºñáÑΓ ¡«óδ⌐ Σá⌐½ ¿ - »α¿ πß½«ó¿¿ «ΓßπΓßΓó¿∩
- «Φ¿í«¬ - »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß. é¡πΓα¿ »α«úαá¼¼δ ∩ñα« ñѽáÑΓ ¬«»¿ε ¬«¡ΓѬ-
- ßΓá α«ñ¿Γѽ∞߬«ú« »α«µÑßßá ñ½∩ »«α«ªñÑ¡¡«ú«, »α¿ φΓ«¼ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß
- ¿ß»«½¡∩ÑΓß∩ ó «ñ¡«¼ áñαÑß¡«¼ »α«ßΓαá¡ßΓóÑ, á »«α«ªñÑ¡¡δ⌐ - ó ñαπú«¼. èáªñδ⌐
- ¿º »α«µÑßß«ó ¼«ªÑΓ αáí«ΓáΓ∞ ß« ßó«¿¼¿ ß«íßΓóÑ¡¡δ¼¿ ¬«»¿∩¼¿ ú½«íá½∞¡δσ »ÑαÑ-
- ¼Ñ¡¡δσ fdrd, fdwt ¿ c, á Γá¬ªÑ ß« ßó«¿¼¿ ß«íßΓóÑ¡¡δ¼¿ ¬«»¿∩¼¿ ßΓѬ«óδσ »ÑαÑ-
- ¼Ñ¡¡δσ argc ¿ argv, ¡« ¡¿ «ñ¿¡ ¿º ¡¿σ ¡Ñ ¼«ªÑΓ «íαáΘáΓ∞ß∩ ¬ »ÑαѼѡ¡δ¼ ñαπ-
- ú«ú« »α«µÑßßá. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, »α¿ óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ fork ∩ñα« ñѽáÑΓ ¬«»¿ε
- áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »Ñαó«ú« »α«µÑßßá ñ½∩ óΓ«α«ú«, ¿ »«α«ªñÑ¡¡δ⌐ »α«µÑßß,
- Γᬿ¼ «íαẫ¼, ¡áß½ÑñπÑΓ ñ«ßΓπ» ¬ Σá⌐½á¼ α«ñ¿Γѽ∞߬«ú« (Γ« ÑßΓ∞ ¬ Σá⌐½á¼, ¿¼
- αá¡ÑÑ «Γ¬αδΓδ¼ ¿ ß«ºñá¡¡δ¼) ß »αáó«¼ ¿ß»«½∞º«óá¡¿∩ ΓÑσ ªÑ ßá¼δσ ñÑ߬-
- α¿»Γ«α«ó.
- É«ñ¿Γѽ∞߬¿⌐ ¿ »«α«ªñÑ¡¡δ⌐ »α«µÑßßδ ¡Ñºáó¿ß¿¼« ñαπú «Γ ñαπúá, ¬«¡Ñτ¡«,
- óδºδóáεΓ Σπ¡¬µ¿ε rdwrt ¿ ó µ¿¬½Ñ ßτ¿ΓδóáεΓ »« «ñ¡«¼π íá⌐Γπ ¿¡Σ«α¼áµ¿ε ¿º ¿ß-
- σ«ñ¡«ú« Σá⌐½á ¿ »ÑαÑ»¿ßδóáεΓ ÑÑ ó Σá⌐½ óδó«ñá. öπ¡¬µ¿∩ rdwrt ó«ºóαáΘáÑΓ π»-
- αáó½Ñ¡¿Ñ, ¬«úñá »α¿ ßτ¿Γδóá¡¿¿ «í¡áαπª¿óáÑΓß∩ ¬«¡Ñµ Σá⌐½á. ƒñα« »ÑαÑñ ΓѼ
- πªÑ πóѽ¿τ¿½« º¡áτÑ¡¿∩ ßτÑΓτ¿¬«ó ßß佫¬ ¡á ¿ßσ«ñ¡δ⌐ ¿ αѺπ½∞Γ¿απεΘ¿⌐ Σá⌐½δ ó
- Γáí½¿µÑ Σá⌐½«ó, ¿ ñÑß¬α¿»Γ«αδ, ¿ß»«½∞ºπѼδÑ ó «í«¿σ »α«µÑßßáσ, áñαÑßπεΓ ¬
- «ñ¡¿¼ ¿ ΓѼ ªÑ ßΓα«¬á¼ ó Γáí½¿µÑ. Æá¬¿¼ «íαẫ¼, ñÑß¬α¿»Γ«αδ fdrd ó Γ«¼ ¿ ó
- ñαπú«¼ »α«µÑßßáσ π¬áºδóáεΓ ¡á ºá»¿ß∞ ó Γáí½¿µÑ Σá⌐½«ó, ß««ΓóÑΓßΓóπεΘπε ¿ß-
- σ«ñ¡«¼π Σá⌐½π, á ñÑß¬α¿»Γ«αδ, »«ñßΓáó½∩ѼδÑ ó ¬áτÑßΓóÑ fdwt, - ¡á ºá»¿ß∞,
- ß««ΓóÑΓßΓóπεΘπε αѺπ½∞Γ¿απεΘѼπ Σá⌐½π (Σá⌐½π óδó«ñá). Å«φΓ«¼π «íá »α«µÑßßá
- ¡¿¬«úñá ¡Ñ «íαáΓ∩Γß∩ ó¼ÑßΓÑ ¡á τΓÑ¡¿Ñ ¿½¿ ºá»¿ß∞ ¬ «ñ¡«¼π ¿ Γ«¼π ªÑ áñαÑßπ,
- óδτ¿ß½∩Ѽ«¼π ß »«¼«Θ∞ε ß¼ÑΘÑ¡¿∩ ó¡πΓα¿ Σá⌐½á, »«ß¬«½∞¬π ∩ñα« ß¼ÑΘáÑΓ ó¡πΓα¿-
- Σá⌐½«óδÑ π¬áºáΓѽ¿ »«ß½Ñ ¬áªñ«⌐ «»Ñαᵿ¿ τΓÑ¡¿∩ ¿½¿ ºá»¿ß¿. ìÑß¼«Γα∩ ¡á Γ«,
- τΓ«, ¬áºá½«ß∞ íδ, ¿º-ºá Γ«ú«, τΓ« »α«µÑßßδ αáß»αÑñѽ∩εΓ ¼Ñªñπ ß«í«⌐ αáí«τπε
- ¡áúαπº¬π, «¡¿ ¬«»¿απεΓ ¿ßσ«ñ¡δ⌐ Σá⌐½ ó ñóá αáºá íδßΓαÑÑ, ß«ñÑন¼«Ñ αѺπ½∞-
- Γ¿απεΘÑú« Σá⌐½á ºáó¿ß¿Γ «Γ «τÑαÑñ¡«ßΓ¿, ó ¬«Γ«α«⌐ ∩ñα« ºá»π߬áÑΓ »α«µÑßßδ.
- àß½¿ ∩ñα« ºá»π߬áÑΓ »α«µÑßßδ Γá¬, τΓ« «¡¿ ¿ß»«½¡∩εΓ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ »«»Ñ-
- αѼѡ¡« (τÑαÑñπ∩ ¿ ß»áαÑ¡¡δÑ ó맮óδ Σπ¡¬µ¿⌐ read-write), ß«ñÑন¼«Ñ αѺπ½∞-
-
-
- 184
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <fcntl.h> │
- │ int fdrd, fdwt; │
- │ char c; │
- │ │
- │ main(argc, argv) │
- │ int argc; │
- │ char *argv[]; │
- │ { │
- │ if (argc != 3) │
- │ exit(1); │
- │ if ((fdrd = open(argv[1],O_RDONLY)) == -1) │
- │ exit(1); │
- │ if ((fdwt = creat(argv[2],0666)) == -1) │
- │ exit(1); │
- │ │
- │ fork(); │
- │ /* «íá »α«µÑßßá ¿ß»«½¡∩εΓ «ñ¡π ¿ Γπ ªÑ »α«úαá¼¼π */ │
- │ rdwrt(); │
- │ exit(0); │
- │ } │
- │ │
- │ rdwrt(); │
- │ { │
- │ for(;;) │
- │ { │
- │ if (read(fdrd,&c,1) != 1) │
- │ return; │
- │ write(fdwt,&c,1); │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.4. Åα«úαá¼¼á, ó ¬«Γ«α«⌐ α«ñ¿Γѽ∞߬¿⌐ ¿ »«α«ªñÑ¡¡δ⌐
- »α«µÑßßδ αáºñѽ∩εΓ ñ«ßΓπ» ¬ Σá⌐½π
-
-
- Γ¿απεΘÑú« Σá⌐½á íπñÑΓ ß«ó»áñáΓ∞ ß ß«ñÑন¼δ¼ ¿ßσ«ñ¡«ú« Σá⌐½á. Éáßß¼«Γα¿¼,
- «ñ¡á¬«, ß½πτá⌐, ¬«úñá »α«µÑßßδ ß«í¿αáεΓß∩ ßτ¿ΓáΓ∞ ¿º ¿ßσ«ñ¡«ú« Σá⌐½á »«ß½Ñ-
- ñ«óáΓѽ∞¡«ßΓ∞ ¿º ñóπσ ß¿¼ó«½«ó "ab". ÅαÑñ»«½«ª¿¼, τΓ« α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß
- ßτ¿Γá½ ß¿¼ó«½ "a", ¡« ¡Ñ π߻ѽ ºá»¿ßáΓ∞ Ñú«, Γᬠ¬á¬ ∩ñα« »ÑαѬ½ετ¿½«ß∞ ¡á
- ¬«¡ΓѬßΓ »«α«ªñÑ¡¡«ú« »α«µÑßßá. àß½¿ »«α«ªñÑ¡¡δ⌐ »α«µÑßß ßτ¿ΓδóáÑΓ ß¿¼ó«½
- "b" ¿ ºá»¿ßδóáÑΓ Ñú« ó αѺπ½∞Γ¿απεΘ¿⌐ Σá⌐½ ñ« ó«º«í¡«ó½Ñ¡¿∩ α«ñ¿Γѽ∞߬«ú«
- »α«µÑßßá, ßΓ᫬á "ab" ó αѺπ½∞Γ¿απεΘѼ Σá⌐½Ñ íπñÑΓ ¿¼ÑΓ∞ ó¿ñ "ba". ƒñα« ¡Ñ
- úáαá¡Γ¿απÑΓ ß«ú½áß«óá¡¿Ñ ΓѼ»«ó óδ»«½¡Ñ¡¿∩ »α«µÑßß«ó.
- ÆÑ»Ñα∞ »ÑαÑ⌐ñѼ ¬ »α«úαá¼¼Ñ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.5, ó ¬«Γ«α«⌐
- »α«µÑßß-»«Γ«¼«¬ ¡áß½ÑñπÑΓ «Γ ßó«Ñú« α«ñ¿Γѽ∩ Σá⌐½«óδÑ ñÑß¬α¿»Γ«αδ 0 ¿ 1 (ß«-
- «ΓóÑΓßΓóπεΘ¿Ñ ßΓá¡ñáαΓ¡«¼π óó«ñπ ¿ ßΓá¡ñáαΓ¡«¼π óδó«ñπ). Åα¿ ¬áªñ«¼ óδ»«½¡Ñ-
- ¡¿¿ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ pipe »α«¿ºó«ñ¿Γß∩ ¡áº¡áτÑ¡¿Ñ ñóπσ Σá⌐½«óδσ ñÑß¬α¿»Γ«-
- α«ó ó ¼áßß¿óáσ to_par ¿ to_chil. Åα«µÑßß óδºδóáÑΓ Σπ¡¬µ¿ε fork ¿ ñѽáÑΓ ¬«-
- »¿ε ßó«Ñú« ¬«¡ΓѬßΓá: ¬áªñδ⌐ ¿º »α«µÑßß«ó ¿¼ÑÑΓ ñ«ßΓπ» Γ«½∞¬« ¬ ßó«¿¼ ß«íßΓ-
- óÑ¡¡δ¼ ñá¡¡δ¼, ΓᬠªÑ ¬á¬ ¿ ó »αÑñδñπΘѼ »α¿¼ÑαÑ. É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ºá¬-
- αδóáÑΓ Σá⌐½ ßΓá¡ñáαΓ¡«ú« óδó«ñá (ñÑß¬α¿»Γ«α 1) ¿ ñπí½¿απÑΓ ñÑß¬α¿»Γ«α ºá»¿-
- ß¿, ó«ºóαáΘáѼδ⌐ ó ¬á¡á½ to_chil. ū߬«½∞¬π »Ñαó«Ñ ßó«í«ñ¡«Ñ ¼ÑßΓ« ó Γáí½¿µÑ
- ñÑß¬α¿»Γ«α«ó α«ñ¿Γѽ∞߬«ú« »α«µÑßßá «íαẫóὫß∞ ó αѺπ½∞ΓáΓÑ Γ«½∞¬« τΓ« óδ-
- »«½¡Ñ¡¡«⌐ «»Ñαᵿ¿ ºá¬αδΓ¿∩ (close) Σá⌐½á óδó«ñá, ∩ñα« »ÑαÑ»¿ßδóáÑΓ Γπñá
- ñÑß¬α¿»Γ«α ºá»¿ß¿ ó ¬á¡á½ ¿ φëà ñÑß¬α¿»Γ«α ßΓá¡«ó¿Γß∩ ñÑß¬α¿»Γ«α«¼ Σá⌐½á
- ßΓá¡ñáαΓ¡«ú« óδó«ñá ñ½∩ to_chil. ÆÑ ªÑ ßá¼δÑ ñÑ⌐ßΓó¿∩ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß
- óδ»«½¡∩ÑΓ ó «Γ¡«ΦÑ¡¿¿ ñÑß¬α¿»Γ«αá Σá⌐½á ßΓá¡ñáαΓ¡«ú« óó«ñá, ºá¼Ñ¡∩∩ Ñú« ñÑß-
-
- 185
-
- ¬α¿»Γ«α«¼ τΓÑ¡¿∩ ¿º ¬á¡á½á to_par. ê »«α«ªñÑ¡¡δ⌐ »α«µÑßß ºá¬αδóáÑΓ Σá⌐½
- ßΓá¡ñáαΓ¡«ú« óó«ñá (ñÑß¬α¿»Γ«α 0) ¿ ΓᬠªÑ ñπí½¿απÑΓ ñÑß¬α¿»Γ«α τΓÑ¡¿∩ ¿º
- ¬á¡á½á to_chil. ū߬«½∞¬π »Ñαó«Ñ ßó«í«ñ¡«Ñ ¼ÑßΓ« ó Γáí½¿µÑ ñÑß¬α¿»Γ«α«ó Σá⌐-
- ½«ó »αѪñÑ í佫 ºá¡∩Γ« Σá⌐½«¼ ßΓá¡ñáαΓ¡«ú« óó«ñá, Ñú« ñÑß¬α¿»Γ«α«¼ ßΓá¡«ó¿Γ-
- ß∩ ñÑß¬α¿»Γ«α τΓÑ¡¿∩ ¿º ¬á¡á½á to_chil. ǡὫú¿τ¡δÑ ñÑ⌐ßΓó¿∩ óδ»«½¡∩εΓß∩ ¿ ó
- «Γ¡«ΦÑ¡¿¿ ñÑß¬α¿»Γ«αá Σá⌐½á ßΓá¡ñáαΓ¡«ú« óδó«ñá, ºá¼Ñ¡∩∩ Ñú« ñÑß¬α¿»Γ«α«¼
- ºá»¿ß¿ ó ¬á¡á½ to_par. ê Γ«Γ, ¿ ñαπú«⌐ »α«µÑßßδ ºá¬αδóáεΓ Σá⌐½δ, ñÑß¬α¿»Γ«αδ
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <string.h> │
- │ char string[] = "hello world"; │
- │ main() │
- │ { │
- │ int count,i; │
- │ int to_par[2],to_chil[2]; /* ñ½∩ ¬á¡á½«ó α«ñ¿Γѽ∩ ¿ │
- │ »«Γ«¼¬á */ │
- │ char buf[256]; │
- │ pipe(to_par); │
- │ pipe(to_chil); │
- │ if (fork() == 0) │
- │ { │
- │ /* óδ»«½¡Ñ¡¿Ñ »«α«ªñÑ¡¡«ú« »α«µÑßßá */ │
- │ close(0); /* ºá¬αδΓ¿Ñ »αѪ¡Ñú« ßΓá¡ñáαΓ¡«ú« óó«ñá */ │
- │ dup(to_chil[0]); /* ñπí½¿α«óá¡¿Ñ ñÑß¬α¿»Γ«αá τΓÑ¡¿∩ │
- │ ¿º ¬á¡á½á ó »«º¿µ¿ε ßΓá¡ñáαΓ¡«ú« │
- │ óó«ñá */ │
- │ close(1); /* ºá¬αδΓ¿Ñ »αѪ¡Ñú« ßΓá¡ñáαΓ¡«ú« óδó«ñá */│
- │ dup(to_par[0]); /* ñπí½¿α«óá¡¿Ñ ñÑß¬α¿»Γ«αá ºá»¿ß¿ │
- │ ó ¬á¡á½ ó »«º¿µ¿ε ßΓá¡ñáαΓ¡«ú« │
- │ óδó«ñá */ │
- │ close(to_par[1]); /* ºá¬αδΓ¿Ñ ¡Ñ¡πª¡δσ ñÑß¬α¿»Γ«α«ó │
- │ close(to_chil[0]); ¬á¡á½á */ │
- │ close(to_par[0]); │
- │ close(to_chil[1]); │
- │ for (;;) │
- │ { │
- │ if ((count = read(0,buf,sizeof(buf))) == 0) │
- │ exit(); │
- │ write(1,buf,count); │
- │ } │
- │ } │
- │ /* óδ»«½¡Ñ¡¿Ñ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá */ │
- │ close(1); /* »ÑαÑ¡áßΓα«⌐¬á ßΓá¡ñáαΓ¡«ú« óó«ñá-óδó«ñá */│
- │ dup(to_chil[1]); │
- │ close(0); │
- │ dup(to_par[0]); │
- │ close(to_chil[1]); │
- │ close(to_par[0]); │
- │ close(to_chil[0]); │
- │ close(to_par[1]); │
- │ for (i = 0; i < 15; i++) │
- │ { │
- │ write(1,string,strlen(string)); │
- │ read(0,buf,sizeof(buf)); │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.5. êß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿⌐ pipe, dup ¿ fork
-
- 186
-
-
- ¬«Γ«αδσ ó«ºóαáΓ¿½á Σπ¡¬µ¿∩ pipe - σ«α«Φá∩ Γαáñ¿µ¿∩, ó τѼ ¡á¼ ÑΘÑ »αÑñßΓ«¿Γ
- πíÑñ¿Γ∞ß∩. é αѺπ½∞ΓáΓÑ, ¬«úñá α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß »ÑαÑ»¿ßδóáÑΓ ñá¡¡δÑ ó
- ßΓá¡ñáαΓ¡δ⌐ óδó«ñ, ºá»¿ß∞ óÑñÑΓß∩ ó ¬á¡á½ to_chil ¿ ñá¡¡δÑ »«ßΓπ»áεΓ ¬ »«-
- ᫪ñÑ¡¡«¼π »α«µÑßßπ, ¬«Γ«αδ⌐ ßτ¿ΓδóáÑΓ ¿σ τÑαѺ ßó«⌐ ßΓá¡ñáαΓ¡δ⌐ óó«ñ. è«úñá
- ªÑ »«α«ªñÑ¡¡δ⌐ »α«µÑßß »¿ΦÑΓ ñá¡¡δÑ ó ßΓá¡ñáαΓ¡δ⌐ óδó«ñ, ºá»¿ß∞ óÑñÑΓß∩ ó
- ¬á¡á½ to_par ¿ ñá¡¡δÑ »«ßΓπ»áεΓ ¬ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ, ßτ¿ΓδóáεΘѼπ ¿σ
- τÑαѺ ßó«⌐ ßΓá¡ñáαΓ¡δ⌐ óó«ñ. Æá¬ τÑαѺ ñóá ¬á¡á½á «íá »α«µÑßßá «í¼Ñ¡¿óáεΓß∩
- ß««íΘÑ¡¿∩¼¿.
- ÉѺπ½∞ΓáΓδ φΓ«⌐ »α«úαá¼¼δ ¡Ñ ºáó¿ß∩Γ «Γ Γ«ú«, ó ¬á¬«⌐ «τÑαÑñ¡«ßΓ¿ »α«-
- µÑßßδ óδ»«½¡∩εΓ ßó«¿ ñÑ⌐ßΓó¿∩. Æá¬¿¼ «íαẫ¼, ¡ÑΓ ¡¿¬á¬«⌐ αạ¿µδ, ó«ºóαáΘá-
- ÑΓß∩ ½¿ π»αáó½Ñ¡¿Ñ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ ¿º Σπ¡¬µ¿¿ fork αá¡∞ΦÑ ¿½¿ »«ºªÑ,
- τѼ »«α«ªñÑ¡¡«¼π »α«µÑßßπ. ê ΓᬠªÑ íѺαẽ¿τÑ¡ »«α∩ñ«¬, ó ¬«Γ«α«¼ »α«µÑßßδ
- óδºδóáεΓ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ »ÑαÑñ ΓѼ, ¬á¬ ó«⌐Γ¿ ó ßó«⌐ ß«íßΓóÑ¡¡δ⌐ µ¿¬½, ¿í«
- «¡¿ ¿ß»«½∞ºπεΓ ¿ñÑ¡Γ¿τ¡δÑ ßΓαπ¬Γπαδ ∩ñαá. àß½¿ »α«µÑßß-»«Γ«¼«¬ ¿ß»«½¡∩ÑΓ
- Σπ¡¬µ¿ε read αá¡∞ΦÑ, τѼ Ñú« α«ñ¿Γѽ∞ óδ»«½¡¿Γ write, «¡ íπñÑΓ »α¿«ßΓá¡«ó½Ñ¡
- ñ« ΓÑσ »«α, »«¬á α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ¡Ñ »α«¿ºóÑñÑΓ ºá»¿ß∞ ó ¬á¡á½ ¿ ΓѼ ßá-
- ¼δ¼ ¡Ñ ó«º«í¡«ó¿Γ óδ»«½¡Ñ¡¿Ñ »«Γ«¼¬á. àß½¿ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ºá»¿ßδóáÑΓ ó
- ¬á¡á½ ñ« Γ«ú«, ¬á¬ Ñú« »«Γ«¼«¬ »α¿ßΓπ»¿Γ ¬ τΓÑ¡¿ε ¿º ¬á¡á½á, »Ñαóδ⌐ »α«µÑßß
- ¡Ñ ß¼«ªÑΓ ó ßó«ε «τÑαÑñ∞ ßτ¿ΓáΓ∞ ñá¡¡δÑ ¿º ßΓá¡ñáαΓ¡«ú« óó«ñá, »«¬á óΓ«α«⌐
- »α«µÑßß ¡Ñ »α«τ¿ΓáÑΓ óßÑ ¿º ßó«Ñú« ßΓá¡ñáαΓ¡«ú« óó«ñá ¿ ¡Ñ »α«¿ºóÑñÑΓ ºá»¿ß∞
- ñá¡¡δσ ó ßΓá¡ñáαΓ¡δ⌐ óδó«ñ. æ φΓ«ú« ¼ÑßΓá »«α∩ñ«¬ αáí«Γδ ªÑßΓ¬« Σ¿¬ß¿α«óá¡:
- ¬áªñδ⌐ »α«µÑßß ºáóÑαΦáÑΓ óδ»«½¡Ñ¡¿Ñ Σπ¡¬µ¿⌐ read ¿ write ¿ ¡Ñ ¼«ªÑΓ óδ»«½-
- ¡¿Γ∞ ß½ÑñπεΘπε «»Ñαᵿε read ñ« ΓÑσ »«α, »«¬á ñαπú«⌐ »α«µÑßß ¡Ñ óδ»«½¡¿Γ »á-
- απ read-write. É«ñ¿Γѽ∞-
- ߬¿⌐ »α«µÑßß »«ß½Ñ 15 ¿ΓÑαᵿ⌐ ºáóÑαΦáÑΓ αáí«Γπ; »«α«ªñÑ¡¡δ⌐ »α«µÑßß ¡áΓá½-
- ¬¿óáÑΓß∩ ¡á ¬«¡Ñµ Σá⌐½á ("end-of-file"), »«ß¬«½∞¬π ¬á¡á½ ¡Ñ ßó∩ºá¡ í«½∞ΦÑ ¡¿
- ß «ñ¡¿¼ ¿º ºá»¿ßδóáεΘ¿σ »α«µÑßß«ó, ¿ Γ«ªÑ ºáóÑαΦáÑΓ αáí«Γπ. àß½¿ »«α«ªñÑ¡¡δ⌐
- »α«µÑßß »«»δΓáÑΓß∩ »α«¿ºóÑßΓ¿ ºá»¿ß∞ ó ¬á¡á½ »«ß½Ñ ºáóÑαΦÑ¡¿∩ α«ñ¿Γѽ∞߬«ú«
- »α«µÑßßá, «¡ »«½πτ¿Γ ß¿ú¡á½ « Γ«¼, τΓ« ¬á¡á½ ¡Ñ ßó∩ºá¡ ¡¿ ß «ñ¡¿¼ ¿º »α«µÑß-
- ß«ó τΓÑ¡¿∩.
- îδ π»«¼∩¡π½¿ « Γ«¼, τΓ« σ«α«ΦÑ⌐ Γαáñ¿µ¿Ñ⌐ ó »α«úαá¼¼¿α«óá¡¿¿ ∩ó½∩ÑΓß∩
- ºá¬αδΓ¿Ñ ¡Ñ¡πª¡δσ Σá⌐½«óδσ ñÑß¬α¿»Γ«α«ó. é »«½∞ºπ φΓ«ú« ú«ó«α∩Γ Γα¿ ñ«ó«ñá.
- é«-»Ñαóδσ, ñÑß¬α¿»Γ«αδ Σá⌐½«ó »«ßΓ«∩¡¡« ¡áσ«ñ∩Γß∩ »«ñ ¬«¡Γα«½Ñ¼ ß¿ßΓѼδ, ¬«-
- Γ«αá∩ ¡á¬½áñδóáÑΓ «úαá¡¿τÑ¡¿Ñ ¡á ¿σ ¬«½¿τÑßΓó«. é«-óΓ«αδσ, ó« óαѼ∩ ¿ß»«½¡Ñ-
- ¡¿∩ »«α«ªñÑ¡¡«ú« »α«µÑßßá »α¿ßó«Ñ¡¿Ñ ñÑß¬α¿»Γ«α«ó ó ¡«ó«¼ ¬«¡ΓѬßΓÑ ß«σαá¡∩-
- ÑΓß∩ (ó τѼ ¼δ ÑΘÑ πíÑñ¿¼ß∩). çá¬αδΓ¿Ñ ¡Ñ¡πª¡δσ Σá⌐½«ó ñ« ºá»πß¬á »α«µÑßßá
- «Γ¬αδóáÑΓ »ÑαÑñ »α«úαἼἿ 󫺼«ª¡«ßΓ∞ ¿ß»«½¡Ñ¡¿∩ ó "ßΓÑα¿½∞¡δσ" πß½«ó¿∩σ,
- ßó«í«ñ¡δσ «Γ ½εíδσ ¡Ñ«ª¿ñá¡¡«ßΓÑ⌐, ¿¼Ñ∩ «Γ¬αδΓ묨 Γ«½∞¬« Σá⌐½δ ßΓá¡ñáαΓ¡«ú«
- óó«ñá-óδó«ñá ¿ «Φ¿í«¬. ìᬫ¡Ñµ, Σπ¡¬µ¿∩ read ñ½∩ ¬á¡á½á ó«ºóαáΘáÑΓ »α¿º¡á¬
- ¬«¡µá Σá⌐½á Γ«½∞¬« ó Γ«¼ ß½πτáÑ, Ñß½¿ ¬á¡á½ ¡Ñ íδ½ «Γ¬αδΓ ñ½∩ ºá»¿ß¿ ¡¿ «ñ-
- ¡¿¼ ¿º »α«µÑßß«ó. àß½¿ ßτ¿ΓδóáεΘ¿⌐ »α«µÑßß íπñÑΓ ñÑαªáΓ∞ ñÑß¬α¿»Γ«α ºá»¿ß¿ ó
- ¬á¡á½ «Γ¬αδΓδ¼, «¡ ¡¿¬«úñá ¡Ñ πº¡áÑΓ, ºá¬αδ½ ½¿ ºá»¿ßδóáεΘ¿⌐ »α«µÑßß αáí«Γπ
- ¡á ßó«Ñ¼ ¬«¡µÑ ¬á¡á½á ¿½¿ ¡ÑΓ. éδΦÑ»α¿óÑñÑ¡¡á∩ »α«úαá¼¼á ¡Ñ αáí«Γá½á íδ ¡áñ-
- ½ÑªáΘ¿¼ «íαẫ¼, Ñß½¿ íδ »ÑαÑñ óσ«ñ«¼ ó µ¿¬½ óδ»«½¡Ñ¡¿∩ »α«µÑßß«¼-»«Γ«¼¬«¼
- ¡Ñ í뫨 ºá¬αδΓδ ñÑß¬α¿»Γ«αδ ºá»¿ß¿ ó ¬á¡á½.
-
-
- E7.2 æêâìÇï¢F
-
- æ¿ú¡á½δ ß««íΘáεΓ »α«µÑßßá¼ « 󫺡¿¬¡«óÑ¡¿¿ áß¿¡σα«¡¡δσ ß«íδΓ¿⌐. Å«ß佬á
- ß¿ú¡á½«ó »α«¿ºó«ñ¿Γß∩ »α«µÑßßἿ - ñαπú ñαπúπ, ß »«¼«Θ∞ε Σπ¡¬µ¿¿ kill, - ¿½¿
- ∩ñα«¼. é óÑαß¿¿ V (óΓ«αá∩ αÑñᬵ¿∩) ß¿ßΓѼδ UNIX ßπΘÑßΓóπεΓ 19 αẽ¿τ¡δσ
- ß¿ú¡á½«ó, ¬«Γ«αδÑ ¼«ª¡« ¬½áßß¿Σ¿µ¿α«óáΓ∞ ß½ÑñπεΘ¿¼ «íαẫ¼:
- * æ¿ú¡á½δ, »«ßδ½áѼδÑ ó ß½πτáÑ ºáóÑαΦÑ¡¿∩ óδ»«½¡Ñ¡¿∩ »α«µÑßßá, Γ« ÑßΓ∞
- Γ«úñá, ¬«úñá »α«µÑßß óδ»«½¡∩ÑΓ Σπ¡¬µ¿ε exit ¿½¿ Σπ¡¬µ¿ε signal ß »áαá-
- ¼ÑΓα«¼ death of child (ú¿íѽ∞ »«Γ«¼¬á);
- * æ¿ú¡á½δ, »«ßδ½áѼδÑ ó ß½πτáÑ ó«º¡¿¬¡«óÑ¡¿∩ óδºδóáѼδσ »α«µÑßß«¼ «ß«íδσ
- ß¿Γπᵿ⌐, Γᬿσ ¬á¬ «íαáΘÑ¡¿Ñ ¬ áñαÑßπ, ¡áσ«ñ∩ΘѼπß∩ ºá »αÑñѽἿ ó¿αΓπ-
-
- 187
-
- á½∞¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »α«µÑßßá, ¿½¿ »«»δΓ¬á ºá»¿ß¿ ó «í½áßΓ∞
- »á¼∩Γ¿, «Γ¬αδΓπε Γ«½∞¬« ñ½∩ τΓÑ¡¿∩ (¡á»α¿¼Ñα, ΓѬßΓ »α«úαá¼¼δ), ¿½¿ »«-
- »δΓ¬á ¿ß»«½¡Ñ¡¿∩ »α¿ó¿½Ñú¿α«óá¡¡«⌐ ¬«¼á¡ñδ, á Γá¬ªÑ αẽ¿τ¡δÑ á»»áαáΓ¡δÑ
- «Φ¿í¬¿;
- * æ¿ú¡á½δ, »«ßδ½áѼδÑ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ »α¿ 󫺡¿¬¡«-
- óÑ¡¿¿ ¡Ñ¿ß»αáó¿¼δσ «Φ¿í«¬, Γᬿσ ¬á¬ ¿ßτÑα»á¡¿Ñ ß¿ßΓѼ¡δσ αÑßπαß«ó ó«
- óαѼ∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec »«ß½Ñ «ßó«í«ªñÑ¡¿∩ ¿ßσ«ñ¡«ú« áñαÑß¡«ú«
- »α«ßΓαá¡ßΓóá (ß¼. αáºñѽ 7.5);
- * æ¿ú¡á½δ, »α¿τ¿¡«⌐ ¬«Γ«αδσ ß½πª¿Γ 󫺡¿¬¡«óÑ¡¿Ñ ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿ ß«óÑαΦÑ¡¡« ¡Ñ«ª¿ñá¡¡δσ «Φ¿í«¬, Γᬿσ ¬á¬ «íαáΘÑ¡¿Ñ ¬ ¡Ñ-
- ßπΘÑßΓóπεΘÑ⌐ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ (»α«µÑßß »ÑαÑñá½ ¡«¼Ñα ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿,
- ¬«Γ«αδ⌐ ¡Ñ ß««ΓóÑΓßΓóπÑΓ ¡¿ «ñ¡«⌐ ¿º ¿¼ÑεΘ¿σß∩ Σπ¡¬µ¿⌐), ºá»¿ß∞ ó ¬á¡á½,
- ¡Ñ ßó∩ºá¡¡δ⌐ ¡¿ ß «ñ¡¿¼ ¿º »α«µÑßß«ó τΓÑ¡¿∩, á Γá¬ªÑ ¿ß»«½∞º«óá¡¿Ñ ¡Ññ«-
- »πßΓ¿¼«ú« º¡áτÑ¡¿∩ ó »áαá¼ÑΓαÑ "reference" ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ lseek. èá-
- ºá½«ß∞ íδ, í«½ÑÑ ½«ú¿τ¡« ó Γᬿσ ß½πτá∩σ ó¼ÑßΓ« »«ß佬¿ ß¿ú¡á½á ó«ºóαá-
- ΘáΓ∞ ¬«ñ «Φ¿í¬¿, «ñ¡á¬« ß »αá¬Γ¿τÑ߬«⌐ Γ«τ¬¿ ºαÑ¡¿∩ ñ½∩ áóáα¿⌐¡«ú« ºá-
- óÑαΦÑ¡¿∩ »α«µÑßß«ó, ó ¬«Γ«αδσ 󫺡¿¬áεΓ »«ñ«í¡δÑ «Φ¿í¬¿, í«½ÑÑ »αÑñ»«τ-
- Γ¿Γѽ∞¡δ¼ ∩ó½∩ÑΓß∩ ¿¼Ñ¡¡« ¿ß»«½∞º«óá¡¿Ñ ß¿ú¡á½«ó (*);
- * æ¿ú¡á½δ, »«ßδ½áѼδÑ »α«µÑßßπ, ¬«Γ«αδ⌐ óδ»«½¡∩ÑΓß∩ ó αѪ¿¼Ñ ºáñáτ¿, ¡á»-
- α¿¼Ñα, ß¿ú¡á½ ΓαÑó«ú¿ (alarm), »«ßδ½áѼδ⌐ »« ¿ßΓÑτÑ¡¿¿ «»αÑñѽѡ¡«ú« »Ñ-
- α¿«ñá óαѼѡ¿, ¿½¿ »α«¿ºó«½∞¡δÑ ß¿ú¡á½δ, ¬«Γ«α묨 «í¼Ñ¡¿óáεΓß∩ »α«µÑßßδ,
- ¿ß»«½∞ºπεΘ¿Ñ Σπ¡¬µ¿ε kill;
- * æ¿ú¡á½δ, ßó∩ºá¡¡δÑ ß ΓÑନ¡á½∞¡δ¼ óºá¿¼«ñÑ⌐ßΓó¿Ñ¼, ¡á»α¿¼Ñα, ß "ºáó¿ßá-
- ¡¿Ñ¼" ΓÑନ¡á½á (¬«úñá ß¿ú¡á½-¡«ß¿Γѽ∞ ¡á ΓÑନ¡á½∞¡«⌐ ½¿¡¿¿ »αѬαáΘáÑΓ-
- ß∩ »« ½εí«⌐ »α¿τ¿¡Ñ) ¿½¿ ß ¡áªáΓ¿Ñ¼ ¬½áó¿Φ "break" ¿ "delete" ¡á ¬½áó¿á-
- ΓπαÑ ΓÑନ¡á½á;
- * æ¿ú¡á½δ, ß »«¼«Θ∞ε ¬«Γ«αδσ »α«¿ºó«ñ¿Γß∩ Γαáßß¿α«ó¬á óδ»«½¡Ñ¡¿∩ »α«µÑßßá.
- ôß½«ó¿∩ »α¿¼Ñ¡Ñ¡¿∩ ß¿ú¡á½«ó ¬áªñ«⌐ úαπ»»δ íπñπΓ αáßß¼«ΓαÑ¡δ ó φΓ«⌐ ¿
- »«ß½ÑñπεΘ¿σ ú½áóáσ.
- è«¡µÑ»µ¿∩ ß¿ú¡á½«ó ¿¼ÑÑΓ ¡Ñ߬«½∞¬« áß»Ñ¬Γ«ó, ßó∩ºá¡¡δσ ß ΓѼ, ¬á¬¿¼ «í-
- αẫ¼ ∩ñα« »«ßδ½áÑΓ ß¿ú¡á½ »α«µÑßßπ, ¬á¬¿¼ «íαẫ¼ »α«µÑßß «íαáíáΓδóáÑΓ ß¿ú-
- ¡á½ ¿ π»αáó½∩ÑΓ αÑᬵ¿Ñ⌐ ¡á ¡Ñú«. Å«ßδ½á∩ ß¿ú¡á½ »α«µÑßßπ, ∩ñα« πßΓá¡áó½¿óá-
- ÑΓ ó Ññ¿¡¿µπ αáºα∩ñ ó »«½Ñ ß¿ú¡á½á ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó, ß««ΓóÑΓßΓóπεΘ¿⌐
- Γ¿»π ß¿ú¡á½á. àß½¿ »α«µÑßß ¡áσ«ñ¿Γß∩ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá ß »α¿«α¿ΓÑΓ«¼,
- ñ«»π߬áεΘ¿¼ »αÑαδóá¡¿∩, ∩ñα« ó«º«í¡«ó¿Γ Ñú« óδ»«½¡Ñ¡¿Ñ. ìá φΓ«¼ α«½∞ «Γ»αá-
- ó¿Γѽ∩ ß¿ú¡á½á (»α«µÑßßá ¿½¿ ∩ñαá) ¿ßτÑα»δóáÑΓß∩. Åα«µÑßß ¼«ªÑΓ ºá»«¼¿¡áΓ∞
- ß¿ú¡á½δ αẽ¿τ¡δσ Γ¿»«ó, ¡« ¡Ñ ¿¼ÑÑΓ ó«º¼«ª¡«ßΓ¿ ºá»«¼¿¡áΓ∞ ¬«½¿τÑßΓó« »«½π-
- τáѼδσ ß¿ú¡á½«ó ¬áªñ«ú« Γ¿»á. ìá»α¿¼Ñα, Ñß½¿ »α«µÑßß »«½πτáÑΓ ß¿ú¡á½ « "ºá-
- ó¿ßá¡¿¿" ¿½¿ «í πñá½Ñ¡¿¿ »α«µÑßßá ¿º ß¿ßΓѼδ, «¡ πßΓá¡áó½¿óáÑΓ ó Ññ¿¡¿µπ ß«-
- «ΓóÑΓßΓóπεΘ¿Ñ αáºα∩ñδ ó »«½Ñ ß¿ú¡á½«ó Γáí½¿µδ »α«µÑßß«ó, ¡« ¡Ñ ¼«ªÑΓ ß¬á-
- ºáΓ∞, ߬«½∞¬« φ¬ºÑ¼»½∩α«ó ß¿ú¡á½á ¬áªñ«ú« Γ¿»á «¡ »«½πτ¿½.
- ƒñα« »α«óÑα∩ÑΓ »«½πτÑ¡¿Ñ ß¿ú¡á½á, ¬«úñá »α«µÑßß ß«í¿αáÑΓß∩ »ÑαÑ⌐Γ¿ ¿º
- αѪ¿¼á ∩ñαá ó αѪ¿¼ ºáñáτ¿, á Γá¬ªÑ ¬«úñá «¡ »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá-
- ¡«óá ¿½¿ óδσ«ñ¿Γ ¿º φΓ«ú« ß«ßΓ«∩¡¿∩ ß ñ«ßΓáΓ«τ¡« ¡¿º¬¿¼ »α¿«α¿ΓÑΓ«¼ »½á¡¿α«-
- óá¡¿∩ (ß¼. É¿ßπ¡«¬ 7.6). ƒñα« «íαáíáΓδóáÑΓ ß¿ú¡á½δ Γ«½∞¬« Γ«úñá, ¬«úñá »α«-
- µÑßß ó«ºóαáΘáÑΓß∩ ¿º αѪ¿¼á ∩ñαá ó αѪ¿¼ ºáñáτ¿. Æá¬¿¼ «íαẫ¼, ß¿ú¡á½ ¡Ñ
- «¬áºδóáÑΓ ¡Ñ¼Ññ½Ñ¡¡«ú« ó«ºñÑ⌐ßΓó¿∩ ¡á »«óÑñÑ¡¿Ñ »α«µÑßßá, ¿ß»«½¡∩Ѽ«ú« ó αÑ-
- ª¿¼Ñ ∩ñαá. àß½¿ »α«µÑßß ¿ß»«½¡∩ÑΓß∩ ó αѪ¿¼Ñ ºáñáτ¿, á ∩ñα« ΓѼ óαѼѡѼ «í-
- αáíáΓδóáÑΓ »αÑαδóá¡¿Ñ, »«ß½πª¿óΦÑÑ »«ó«ñ«¼ ñ½∩ »«ß佬¿ »α«µÑßßπ ß¿ú¡á½á, ∩ñ-
- α« αáß»«º¡áÑΓ ¿ «íαáí«ΓáÑΓ ß¿ú¡á½ »« óδσ«ñÑ ¿º »αÑαδóá¡¿∩. Æá¬¿¼ «íαẫ¼,
- »α«µÑßß ¡Ñ íπñÑΓ ¿ß»«½¡∩Γ∞ß∩ ó αѪ¿¼Ñ ºáñáτ¿, »«¬á ¬á¬¿Ñ-Γ« ß¿ú¡á½δ «ßΓáεΓß∩
- ¡Ñ«íαáí«Γá¡¡δ¼¿.
- ìá É¿ßπ¡¬Ñ 7.7 »αÑñßΓáó½Ñ¡ á½ú«α¿Γ¼, ß »«¼«Θ∞ε ¬«Γ«α«ú« ∩ñα« «»αÑñѽ∩ÑΓ,
-
- ───────────────────────────────────────
- (*) êß»«½∞º«óá¡¿Ñ ß¿ú¡á½«ó ó ¡Ñ¬«Γ«αδσ «íßΓ«∩Γѽ∞ßΓóáσ »«ºó«½∩ÑΓ «í¡áαπª¿Γ∞
- «Φ¿í¬¿ »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼, ¡Ñ »α«óÑα∩εΘ¿σ ¬«ñ ºáóÑαΦÑ¡¿∩ óδºδóáѼδσ
- ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐ (ß««íΘ¿½ ä.É¿τ¿).
-
-
- 188
-
-
- éδ»«½¡∩ÑΓß∩ ó
- αѪ¿¼Ñ ºáñáτ¿
- ┌───────┐
- │ │ Åα«óÑα¬á
- │ 1 │ ¿
- é맮ó Σπ¡¬- │ │ ┌ ─ «íαáí«Γ¬á
- µ¿¿, »αÑαδ- └┬──────┘ ∙┌ ─ ß¿ú¡á½«ó
- óá¡¿Ñ │ ^ ^─ ─┘∙
- ÅαÑαδ- ┌─────┐ ┌───────┘ │─ ─│─ ─ ┘
- óá¡¿Ñ, │ │ │ ┌───────┘ └───┐ 髺óαáΓ ó
- ó«ºóαáΓ│ │ │ │ 髺óαáΓ │ αѪ¿¼ ºáñáτ¿
- ¿º »αÑ-│ │ │ │ │
- αδóá-│ v v │ éδ»«½¡∩ÑΓ- │
- ┌───────┐ ¡¿∩ │ ┌──────┴┐ß∩ ó αѪ¿- ┌┴──────┐
- │ │ └──>│ │¼Ñ ∩ñαá │ │
- │ 9 │<───────────┤ 2 ├────────────>│ 7 │
- │ │ éδσ«ñ │ │ ÉѺÑαó¿απÑΓ-│ │
- └───────┘ └┬──────┘ ß∩ └───────┘
- ÅαѬαáΘÑ¡¿Ñ │ ^ ∙ çáαѺÑα-
- ßπΘÑßΓó«óá¡¿∩ │─ ─ ─│─ ─ ─ ─ ─ ─ ─ ─ ┐ ∙ ó¿α«óá¡
- │ │─ ─ ─ ─ ─ ─ ─ ┐ └ ∙─ ─┐
- ┌───────────────┘ └──────┐ ∙∙∙∙∙∙∙∙ Åα«óÑα¬á
- │ Åα¿«ßΓá¡«ó çá»π߬ │ ∙ └ ─ ─ ─ ß¿ú¡á½«ó
- v │ ∙
- Åα¿-┌───────┐ ┌─┴─────┐ â«Γ«ó ¬
- «ß- │ │ 髺«í¡«ó½Ñ¡¿Ñ │ │ ºá»π߬π
- Γá- │ 4 ├───────────────────────>│ 3 │ ó »á¼∩Γ¿
- ¡«ó-│ │ │ │
- ½Ñ¡ └───┬───┘ └┬──────┘
- ó »á- │ │ ^ ^
- ¼∩Γ¿ │ │ │ │ ä«ßΓáΓ«τ¡«
- │ │ │ │ »á¼∩Γ¿
- │ │ │ └───┐
- │ éδ- éδ- │ │ │
- │ úαπº¬á úαπº¬á │ │ │ 櫺ñá¡
- │ │ │çá- ┌┴──────┐
- │ │ │úαπº-│ │ fork
- │ │ │¬á │ 8 │<─────
- │ │ │ │ │
- │ │ │ └┬──────┘
- │ │ │ │
- │ │ │ │ ìÑñ«ßΓá-
- │ │ │ ┌───┘ Γ«τ¡«
- │ │ │ │ »á¼∩Γ¿
- │ │ │ │ (Γ«½∞¬« ß¿ßΓѼá
- │ │ │ │ »«ñ¬áτ¬¿)
- v v │ v
- ┌───────┐ ┌───┴───┐
- │ │ 髺«í¡«ó½Ñ¡¿Ñ │ │
- │ 6 ├───────────────────────>│ 5 │
- │ │ │ │
- └───────┘ └───────┘
- Åα¿«ßΓá¡«ó½Ñ¡, â«Γ«ó ¬ ºá»π߬π,
- óδúαπªÑ¡ óδúαπªÑ¡
-
- É¿ßπ¡«¬ 7.6. ä¿áúαá¼¼á »ÑαÑσ«ñ«ó »α«µÑßßá ¿º ß«ßΓ«∩¡¿Ñ ó ß«ßΓ«∩¡¿Ñ ß
- π¬áºá¡¿Ñ¼ ¼«¼Ñ¡Γ«ó »α«óÑન ¿ «íαáí«Γ¬¿ ß¿ú¡á½«ó
-
-
- 189
-
- »«½πτ¿½ ½¿ »α«µÑßß ß¿ú¡á½ ¿½¿ ¡ÑΓ. ôß½«ó¿∩, ó ¬«Γ«αδσ Σ«α¼¿απεΓß∩ ß¿ú¡á½δ
- Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á", íπñπΓ αáßß¼«ΓαÑ¡δ »«ºªÑ. îδ Γá¬ªÑ πó¿ñ¿¼, τΓ« »α«µÑßß
- ¼«ªÑΓ ¿ú¡«α¿α«óáΓ∞ «Γñѽ∞¡δÑ ß¿ú¡á½δ, Ñß½¿ ó«ß»«½∞ºπÑΓß∩ Σπ¡¬µ¿Ñ⌐ signal. é
- á½ú«α¿Γ¼Ñ issig ∩ñα« »α«ßΓ« úáß¿Γ ¿¡ñ¿¬áµ¿ε ΓÑσ ß¿ú¡á½«ó, ¡á ¬«Γ«αδÑ »α«µÑßß
- ¡Ñ ªÑ½áÑΓ «íαáΘáΓ∞ 󡿼᡿Ñ, ¿ »α¿ó½Ñ¬áÑΓ ó¡¿¼á¡¿Ñ »α«µÑßßá ¬« óßѼ «ßΓá½∞-
- ¡δ¼ ß¿ú¡á½á¼.
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ issig /* »α«óÑα¬á »«½πτÑ¡¿∩ ß¿ú¡á½«ó */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: "¿ßΓ¿¡á", Ñß½¿ »α«µÑßß »«½πτ¿½ ß¿ú¡á- │
- │ ½δ, ¬«Γ«αδÑ Ñú« ¿¡ΓÑαÑßπεΓ │
- │ "½«ª∞" - ó »α«Γ¿ó¡«¼ ß½πτáÑ │
- │ { │
- │ óδ»«½¡¿Γ∞ »«¬á (»«½Ñ ó ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó, ß«ñÑα- │
- │ ªáΘÑÑ ¿¡ñ¿¬áµ¿ε « »«½πτÑ¡¿¿ ß¿ú¡á½á, σαá¡¿Γ ¡Ñ¡π½Ñó«Ñ │
- │ º¡áτÑ¡¿Ñ) │
- │ { │
- │ ¡á⌐Γ¿ ¡«¼Ñα ß¿ú¡á½á, »«ß½á¡¡«ú« »α«µÑßßπ; │
- │ Ñß½¿ (ß¿ú¡á½ Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á") │
- │ { │
- │ Ñß½¿ (ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á ¿ú¡«α¿απεΓß∩) │
- │ «ßó«í«ñ¿Γ∞ ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó, ¬«Γ«αδÑ │
- │ ß««ΓóÑΓßΓóπεΓ »«Γ«¼¬á¼, »αѬαáΓ¿óΦ¿¼ ßπΘÑßΓó«-│
- │ óá¡¿Ñ; │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á »α¿-│
- │ ¡¿¼áεΓß∩) │
- │ ó«ºóαáΓ¿Γ∞ (¿ßΓ¿¡π); │
- │ } │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ Ñß½¿ (ß¿ú¡á½ ¡Ñ ¿ú¡«α¿απÑΓß∩) │
- │ ó«ºóαáΓ¿Γ∞ (¿ßΓ¿¡π); │
- │ ßíα«ß¿Γ∞ (»«úáß¿Γ∞) ß¿ú¡á½∞¡δ⌐ αáºα∩ñ, πßΓá¡«ó½Ñ¡¡δ⌐ │
- │ ó ß««ΓóÑΓßΓóπεΘѼ »«½Ñ Γáí½¿µδ »α«µÑßß«ó, σαá¡∩ΘѼ │
- │ ¿¡ñ¿¬áµ¿ε »«½πτÑ¡¿∩ ß¿ú¡á½á; │
- │ } │
- │ ó«ºóαáΓ¿Γ∞ (½«ª∞); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.7. ǽú«α¿Γ¼ «»«º¡á¡¿∩ ß¿ú¡á½«ó
-
-
-
- E7.2.1 Äíαáí«Γ¬á ß¿ú¡á½«óF
-
- ƒñα« «íαáíáΓδóáÑΓ ß¿ú¡á½δ ó ¬«¡ΓѬßΓÑ Γ«ú« »α«µÑßßá, ¬«Γ«αδ⌐ »«½πτáÑΓ
- ¿σ, »«φΓ«¼π τΓ«íδ «íαáí«ΓáΓ∞ ß¿ú¡á½δ, ¡πª¡« ºá»πßΓ¿Γ∞ »α«µÑßß. æπΘÑßΓóπÑΓ
- Γα¿ ß»«ß«íá «íαáí«Γ¬¿ ß¿ú¡á½«ó: »α«µÑßß ºáóÑαΦáÑΓß∩ »« »«½πτÑ¡¿¿ ß¿ú¡á½á, ¡Ñ
- «íαáΘáÑΓ ó¡¿¼á¡¿Ñ ¡á ß¿ú¡á½ ¿½¿ óδ»«½¡∩ÑΓ «ß«íπε (»«½∞º«óáΓѽ∞߬πε) Σπ¡¬µ¿ε
- »« Ñú« »«½πτÑ¡¿¿. ÉÑᬵ¿Ñ⌐ »« π¼«½τá¡¿ε ß« ßΓ«α«¡δ »α«µÑßßá, ¿ß»«½¡∩Ѽ«ú« ó
- αѪ¿¼Ñ ∩ñαá, ∩ó½∩ÑΓß∩ ó맮ó Σπ¡¬µ¿¿ exit, «ñ¡á¬« ß »«¼«Θ∞ε Σπ¡¬µ¿¿ signal
- »α«µÑßß ¼«ªÑΓ π¬áºáΓ∞ ñαπú¿Ñ ߻ѵ¿á½∞¡δÑ ñÑ⌐ßΓó¿∩, »α¿¡¿¼áѼδÑ »« »«½πτÑ¡¿¿
- ΓÑσ ¿½¿ ¿¡δσ ß¿ú¡á½«ó.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ signal:
- oldfunction = signal(signum,function);
- úñÑ signum - ¡«¼Ñα ß¿ú¡á½á, »α¿ »«½πτÑ¡¿¿ ¬«Γ«α«ú« íπñÑΓ óδ»«½¡Ñ¡« ñÑ⌐ßΓó¿Ñ,
- ßó∩ºá¡¡«Ñ ß ºá»π߬«¼ »«½∞º«óáΓѽ∞߬«⌐ Σπ¡¬µ¿¿, function - áñαÑß Σπ¡¬µ¿¿,
- oldfunction - ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ º¡áτÑ¡¿Ñ. é¼ÑßΓ« áñαÑßá Σπ¡¬µ¿¿ »α«µÑßß
- ¼«ªÑΓ »ÑαÑñáóáΓ∞ óδºδóáѼ«⌐ »α«µÑñπαÑ signal τ¿ß½á 1 ¿ 0: Ñß½¿ function = 1,
- »α«µÑßß íπñÑΓ ¿ú¡«α¿α«óáΓ∞ óßÑ »«ß½ÑñπεΘ¿Ñ »«ßΓπ»½Ñ¡¿∩ ß¿ú¡á½á ß ¡«¼Ñα«¼
-
- 190
-
- signum («ß«íδ⌐ ß½πτá⌐, ßó∩ºá¡¡δ⌐ ß ¿ú¡«α¿α«ó᡿Ѽ ß¿ú¡á½á "ú¿íѽ∞ »«Γ«¼¬á",
- αáßß¼áΓα¿óáÑΓß∩ ó αáºñÑ½Ñ 7.4), Ñß½¿ = 0 (º¡áτÑ¡¿Ñ »« π¼«½τá¡¿ε), »α«µÑßß »«
- »«½πτÑ¡¿¿ ß¿ú¡á½á ó αѪ¿¼Ñ ∩ñαá ºáóÑαΦáÑΓß∩. é »α«ßΓαá¡ßΓóÑ »α«µÑßßá »«ññÑα-
- ª¿óáÑΓß∩ ¼áßß¿ó »«½Ñ⌐ ñ½∩ «íαáí«Γ¬¿ ß¿ú¡á½«ó, »« «ñ¡«¼π »«½ε ¡á ¬áªñδ⌐ «»αÑ-
- ñѽѡ¡δ⌐ ó ß¿ßΓÑ¼Ñ ß¿ú¡á½. é »«½Ñ, ß««ΓóÑΓßΓóπεΘѼ ß¿ú¡á½π ß π¬áºá¡¡δ¼ ¡«¼Ñ-
- α«¼, ∩ñα« ß«σαá¡∩ÑΓ áñαÑß »«½∞º«óáΓѽ∞߬«⌐ Σπ¡¬µ¿¿, óδºδóáѼ«⌐ »« »«½πτÑ¡¿¿
- ß¿ú¡á½á »α«µÑßß«¼. æ»«ß«í «íαáí«Γ¬¿ ß¿ú¡á½«ó «ñ¡«ú« Γ¿»á ¡Ñ ó½¿∩ÑΓ ¡á «íαá-
- í«Γ¬π ß¿ú¡á½«ó ñαπú¿σ Γ¿»«ó.
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ psig /* «íαáí«Γ¬á ß¿ú¡á½«ó »«ß½Ñ »α«óÑન ¿σ │
- │ ßπΘÑßΓó«óá¡¿∩ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ óδíαáΓ∞ ¡«¼Ñα ß¿ú¡á½á ¿º ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó; │
- │ «τ¿ßΓ¿Γ∞ »«½Ñ ß ¡«¼Ñα«¼ ß¿ú¡á½á; │
- │ Ñß½¿ (»«½∞º«óáΓѽ∞ αá¡ÑÑ óδºδóá½ Σπ¡¬µ¿ε signal, ß »«- │
- │ ¼«Θ∞ε ¬«Γ«α«⌐ ßñѽὠπ¬áºá¡¿Ñ ¿ú¡«α¿α«óáΓ∞ ß¿ú¡á½ ñá¡- │
- │ ¡«ú« Γ¿»á) │
- │ ó«ºóαáΓ¿Γ∞ π»αáó½Ñ¡¿Ñ; │
- │ Ñß½¿ (»«½∞º«óáΓѽ∞ π¬áºá½ Σπ¡¬µ¿ε, ¬«Γ«απε ¡πª¡« óδ»«½- │
- │ ¡¿Γ∞ »« »«½πτÑ¡¿¿ ß¿ú¡á½á) │
- │ { │
- │ ¿º »α«ßΓαá¡ßΓóá »α«µÑßßá óδíαáΓ∞ »«½∞º«óáΓѽ∞߬¿⌐ │
- │ ó¿αΓπá½∞¡δ⌐ áñαÑß Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á; │
- │ /* ß½ÑñπεΘ¿⌐ «»ÑαáΓ«α ¿¼ÑÑΓ ¡ÑªÑ½áΓѽ∞¡δÑ »«í«τ¡δÑ │
- │ φΣΣѬΓδ */ │
- │ «τ¿ßΓ¿Γ∞ »«½Ñ ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá, ß«ñÑαªáΘÑÑ │
- │ áñαÑß Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á; │
- │ ó¡ÑßΓ¿ ¿º¼Ñ¡Ñ¡¿∩ ó »«½∞º«óáΓѽ∞߬¿⌐ ¬«¡ΓѬßΓ: │
- │ ¿ß¬πßßΓóÑ¡¡« ß«ºñáΓ∞ ó ßΓÑ¬Ñ ºáñáτ¿ ºá»¿ß∞, ¿¼¿- │
- │ Γ¿απεΘπε «íαáΘÑ¡¿Ñ ¬ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á; │
- │ ó¡ÑßΓ¿ ¿º¼Ñ¡Ñ¡¿∩ ó ß¿ßΓѼ¡δ⌐ ¬«¡ΓѬßΓ: │
- │ ºá»¿ßáΓ∞ áñαÑß Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á ó »«½Ñ │
- │ ßτÑΓτ¿¬á ¬«¼á¡ñ, »α¿¡áñ½ÑªáΘÑÑ ß«σαá¡Ñ¡¡«¼π αÑ- │
- │ ú¿ßΓα«ó«¼π ¬«¡ΓѬßΓπ ºáñáτ¿; │
- │ ó«ºóαáΓ¿Γ∞ π»αáó½Ñ¡¿Ñ; │
- │ } │
- │ Ñß½¿ (ß¿ú¡á½ ΓαÑíπÑΓ ñá¼»¿α«óá¡¿∩ «íαáºá »α«µÑßßá ó »á- │
- │ ¼∩Γ¿) │
- │ { │
- │ ß«ºñáΓ∞ ó ΓѬπΘѼ ¬áΓὫúÑ Σá⌐½ ß ¿¼Ñ¡Ñ¼ "core"; │
- │ »ÑαÑ»¿ßáΓ∞ ó Σá⌐½ "core" ß«ñÑন¼«Ñ »«½∞º«óáΓѽ∞߬«-│
- │ ú« ¬«¡ΓѬßΓá; │
- │ } │
- │ ¡Ñ¼Ññ½Ñ¡¡« ºá»πßΓ¿Γ∞ á½ú«α¿Γ¼ exit; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.8. ǽú«α¿Γ¼ «íαáí«Γ¬¿ ß¿ú¡á½«ó
-
-
- ÄíαáíáΓδóá∩ ß¿ú¡á½ (É¿ßπ¡«¬ 7.8), ∩ñα« «»αÑñѽ∩ÑΓ Γ¿» ß¿ú¡á½á ¿ «τ¿ΘáÑΓ
- (úáß¿Γ) αáºα∩ñ ó ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó, ß««ΓóÑΓßΓóπεΘ¿⌐ ñá¡¡«¼π Γ¿»π ß¿ú-
- ¡á½á ¿ πßΓá¡«ó½Ñ¡¡δ⌐ ó ¼«¼Ñ¡Γ »«½πτÑ¡¿∩ ß¿ú¡á½á »α«µÑßß«¼. àß½¿ Σπ¡¬µ¿¿ «í-
- αáí«Γ¬¿ ß¿ú¡á½á »α¿ßó«Ñ¡« º¡áτÑ¡¿Ñ »« π¼«½τá¡¿ε, ∩ñα« ó «Γñѽ∞¡δσ ß½πτá∩σ
- »ÑαÑñ ºáóÑαΦÑ¡¿Ñ¼ »α«µÑßßá ßíαáßδóáÑΓ ¡á ó¡ÑΦ¡¿⌐ ¡«ß¿Γѽ∞ (ñá¼»¿απÑΓ) «íαáº
- »α«µÑßßá ó »á¼∩Γ¿ (ß¼. π»α᪡ѡ¿Ñ 7.7). äá¼»¿α«óá¡¿Ñ πñ«í¡« ñ½∩ »α«úαá¼¼¿ß-
-
- 191
-
- Γ«ó ΓѼ, τΓ« »«ºó«½∩ÑΓ πßΓá¡«ó¿Γ∞ »α¿τ¿¡π ºáóÑαΦÑ¡¿∩ »α«µÑßßá ¿ »«ßαÑñßΓó«¼
- φΓ«ú« óÑßΓ¿ «Γ½áñ¬π »α«úαá¼¼. ƒñα« ñá¼»¿απÑΓ ß«ßΓ«∩¡¿Ñ »á¼∩Γ¿ »α¿ »«ßΓπ»½Ñ-
- ¡¿¿ ß¿ú¡á½«ó, ¬«Γ«αδÑ ß««íΘáεΓ « ¬á¬¿σ-¡¿íπñ∞ «Φ¿í¬áσ ó óδ»«½¡Ñ¡¿¿ »α«µÑß-
- ß«ó, ¬á¬ ¡á»α¿¼Ñα, »«»δΓ¬á ¿ß»«½¡Ñ¡¿∩ ºá»αÑΘÑ¡¡«⌐ ¬«¼á¡ñδ ¿½¿ «íαáΘÑ¡¿Ñ ¬
- áñαÑßπ, ¡áσ«ñ∩ΘѼπß∩ ºá »αÑñѽἿ ó¿αΓπá½∞¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »α«-
- µÑßßá. ƒñα« ¡Ñ ñá¼»¿απÑΓ ß«ßΓ«∩¡¿Ñ »á¼∩Γ¿, Ñß½¿ ß¿ú¡á½ ¡Ñ ßó∩ºá¡ ß »α«úαá¼¼-
- ¡«⌐ «Φ¿í¬«⌐. ìá»α¿¼Ñα, »αÑαδóá¡¿Ñ, óδºóá¡¡«Ñ ¡áªáΓ¿Ñ¼ ¬½áó¿Φ "delete" ¿½¿
- "break" ¡á ΓÑନ¡á½Ñ, ¿¼ÑÑΓ ßó«¿¼ αѺπ½∞ΓáΓ«¼ »«ß佬π ß¿ú¡á½á, ¬«Γ«αδ⌐ ß««í-
- ΘáÑΓ « Γ«¼, τΓ« »«½∞º«óáΓѽ∞ σ«τÑΓ αá¡∞ΦÑ óαѼѡ¿ ºáóÑαΦ¿Γ∞ »α«µÑßß, ó Γ«
- óαѼ∩ ¬á¬ ß¿ú¡á½ « "ºáó¿ßá¡¿¿" ∩ó½∩ÑΓß∩ ßó¿ñÑΓѽ∞ßΓó«¼ ¡áαπΦÑ¡¿∩ ßó∩º¿ ß αÑ-
- ú¿ßΓαᵿ«¡¡δ¼ ΓÑନ¡á½«¼. ¥Γ¿ ß¿ú¡á½δ ¡Ñ ßó∩ºá¡δ ß «Φ¿í¬á¼¿ ó »α«ΓѬ᡿¿
- »α«µÑßßá. æ¿ú¡á½ « óδσ«ñÑ (quit), «ñ¡á¬«, óδºδóáÑΓ ßíα«ß ß«ßΓ«∩¡¿∩ »á¼∩Γ¿,
- ¡Ñß¼«Γα∩ ¡á Γ«, τΓ« «¡ 󫺡¿¬áÑΓ ºá »αÑñѽἿ óδ»«½¡∩Ѽ«ú« »α«µÑßßá. ¥Γ«Γ
- ß¿ú¡á½, «íδτ¡« óδºδóáѼδ⌐ «ñ¡«óαѼѡ¡δ¼ ¡áªáΓ¿Ñ¼ ¬½áó¿Φ <Ctrl/│>, ñáÑΓ »α«ú-
- αá¼¼¿ßΓπ 󫺼«ª¡«ßΓ∞ »«½πτáΓ∞ ñá¼» ß«ßΓ«∩¡¿∩ »á¼∩Γ¿ ó ½εí«⌐ ¼«¼Ñ¡Γ »«ß½Ñ ºá-
- »πß¬á »α«µÑßßá, τΓ« íδóáÑΓ ¡Ñ«íσ«ñ¿¼«, Ñß½¿ »α«µÑßß »«»áñáÑΓ ó íÑ߬«¡Ñτ¡δ⌐
- µ¿¬½ óδ»«½¡Ñ¡¿∩ «ñ¡¿σ ¿ ΓÑσ ªÑ ¬«¼á¡ñ (ºáµ¿¬½¿óáÑΓß∩).
- àß½¿ »α«µÑßß »«½πτáÑΓ ß¿ú¡á½, ¡á ¬«Γ«αδ⌐ í佫 αÑΦÑ¡« ¡Ñ «íαáΘáΓ∞ ó¡¿¼á-
- ¡¿Ñ, óδ»«½¡Ñ¡¿Ñ »α«µÑßßá »α«ñ«½ªáÑΓß∩ Γá¬, ß½«ó¡« ß¿ú¡á½á ¿ ¡Ñ í佫. Å«ß-
- ¬«½∞¬π ∩ñα« ¡Ñ ßíαáßδóáÑΓ º¡áτÑ¡¿Ñ ß««ΓóÑΓßΓóπεΘÑú« »«½∩, ßó¿ñÑΓѽ∞ßΓóπεΘÑú«
- « ¡Ñ«íσ«ñ¿¼«ßΓ¿ ¿ú¡«α¿α«óá¡¿∩ ß¿ú¡á½á ñá¡¡«ú« Γ¿»á, Γ« ¬«úñá ß¿ú¡á½ »«ßΓπ»¿Γ
- ó¡«ó∞, »α«µÑßß «»∩Γ∞ ¡Ñ «íαáΓ¿Γ ¡á ¡Ñú« 󡿼᡿Ñ. àß½¿ »α«µÑßß »«½πτáÑΓ ß¿ú-
- ¡á½, αÑáú¿α«óá¡¿Ñ ¡á ¬«Γ«αδ⌐ í佫 »α¿º¡á¡« ¡Ñ«íσ«ñ¿¼δ¼, ßαáºπ »« ó«ºóαáΘÑ¡¿¿
- »α«µÑßßá ó αѪ¿¼ ºáñáτ¿ óδ»«½¡∩ÑΓß∩ ºáαá¡ÑÑ πß½«ó½Ñ¡¡«Ñ ñÑ⌐ßΓó¿Ñ, «ñ¡á¬«
- »αѪñÑ τѼ »ÑαÑóÑßΓ¿ »α«µÑßß ó αѪ¿¼ ºáñáτ¿, ∩ñα« ÑΘÑ ñ«½ª¡« »αÑñ»α¿¡∩Γ∞
- ß½ÑñπεΘ¿Ñ Φáú¿:
- 1. ƒñα« «íαáΘáÑΓß∩ ¬ ß«σαá¡Ñ¡¡«¼π αÑú¿ßΓα«ó«¼π ¬«¡ΓѬßΓπ ºáñáτ¿ ¿ óδí¿αáÑΓ
- º¡áτÑ¡¿∩ ßτÑΓτ¿¬á ¬«¼á¡ñ ¿ π¬áºáΓѽ∩ óÑαΦ¿¡δ ßΓѬá, ¬«Γ«αδÑ íπñπΓ ó«ºó-
- αáΘÑ¡δ »«½∞º«óáΓѽ∞߬«¼π »α«µÑßßπ.
- 2. æíαáßδóáÑΓ ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá »αѪ¡ÑÑ º¡áτÑ¡¿Ñ »«½∩ Σπ¡¬µ¿¿ «íαá-
- í«Γ¬¿ ß¿ú¡á½á ¿ »α¿ßóá¿óáÑΓ Ñ¼π º¡áτÑ¡¿Ñ »« π¼«½τá¡¿ε.
- 3. 櫺ñáÑΓ ¡«óπε ºá»¿ß∞ ó ßΓÑ¬Ñ ºáñáτ¿, ó ¬«Γ«απε, »α¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ óδñÑ-
- ½∩∩ ñ«»«½¡¿Γѽ∞¡πε »á¼∩Γ∞, »ÑαÑ»¿ßδóáÑΓ º¡áτÑ¡¿∩ ßτÑΓτ¿¬á ¬«¼á¡ñ ¿ π¬á-
- ºáΓѽ∩ óÑαΦ¿¡δ ßΓѬá, óδíαá¡¡δÑ αá¡ÑÑ ¿º ß«σαá¡Ñ¡¡«ú« αÑú¿ßΓα«ó«ú« ¬«¡-
- ΓѬßΓá ºáñáτ¿. æΓѬ ºáñáτ¿ íπñÑΓ óδú½∩ñÑΓ∞ Γá¬, ¬á¬ íπñΓ« »α«µÑßß »α«¿º-
- óѽ «íαáΘÑ¡¿Ñ ¬ »«½∞º«óáΓѽ∞߬«⌐ Σπ¡¬µ¿¿ («íαáí«Γ¬¿ ß¿ú¡á½á) ó Γ«⌐ Γ«τ-
- ¬Ñ, úñÑ «¡ óδºδóá½ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε ¿½¿ úñÑ ∩ñα« »αÑαóὫ Ñú« óδ»«½¡Ñ-
- ¡¿Ñ (»ÑαÑñ «»«º¡á¡¿Ñ¼ ß¿ú¡á½á).
- 4. é¡«ß¿Γ ¿º¼Ñ¡Ñ¡¿∩ ó ß«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ ºáñáτ¿: πßΓá¡áó½¿óá-
- ÑΓ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ¬«¼á¡ñ αáó¡δ¼ áñαÑßπ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á, á
- º¡áτÑ¡¿Ñ π¬áºáΓѽ∩ óÑαΦ¿¡δ ßΓѬá αáó¡δ¼ ú½πí¿¡Ñ ßΓÑ¬á ºáñáτ¿.
-
- Æá¬¿¼ «íαẫ¼, »« ó«ºóαáΘÑ¡¿¿ ¿º αѪ¿¼á ∩ñαá ó αѪ¿¼ ºáñáτ¿ »α«µÑßß
- »α¿ßΓπ»¿Γ ¬ óδ»«½¡Ñ¡¿ε Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á; »«ß½Ñ ÑÑ ºáóÑαΦÑ¡¿∩ π»αáó-
- ½Ñ¡¿Ñ íπñÑΓ »ÑαÑñá¡« ¡á Γ« ¼ÑßΓ« ó »α«úαá¼¼Ñ »«½∞º«óáΓѽ∩, úñÑ í佫 »α«¿ºóÑ-
- ñÑ¡« «íαáΘÑ¡¿Ñ ¬ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ¿½¿ »α«¿º«Φ½« »αÑαδóá¡¿Ñ, ΓѼ ßá¼δ¼ ¬á¬
- íδ ¿¼¿Γ¿απÑΓß∩ óδσ«ñ ¿º ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ¿½¿ »αÑαδóá¡¿∩.
- é ¬áτÑßΓóÑ »α¿¼Ñαá ¼«ª¡« »α¿óÑßΓ¿ »α«úαá¼¼π (É¿ßπ¡«¬ 7.9), ¬«Γ«αá∩ »α¿-
- ¡¿¼áÑΓ ß¿ú¡á½δ « »αÑαδóá¡¿¿ (SIGINT) ¿ ßá¼á »«ßδ½áÑΓ ¿σ (ó αѺπ½∞ΓáΓÑ óδ»«½-
- ¡Ñ¡¿∩ Σπ¡¬µ¿¿ kill). ìá É¿ßπ¡¬Ñ 7.10 »αÑñßΓáó½Ñ¡δ Σαáú¼Ñ¡Γδ »α«úαá¼¼¡«ú« ¬«-
- ñá, »«½πτÑ¡¡δÑ ó αѺπ½∞ΓáΓÑ ñ¿ßáßßÑ¼í½¿α«óá¡¿∩ ºáúαπº«τ¡«ú« ¼«ñπ½∩ ó «»Ñαá-
- µ¿«¡¡«⌐ ßαÑñÑ VAX 11/780. Åα¿ óδ»«½¡Ñ¡¿¿ »α«µÑßßá «íαáΘÑ¡¿Ñ ¬ í¿í½¿«ΓÑτ¡«⌐
- »α«µÑñπαÑ kill ¿¼ÑÑΓ áñαÑß (ΦÑßΓ¡áñµáΓ¿α¿τ¡δ⌐) ee; φΓá »α«µÑñπαá ó ßó«ε «τÑ-
- αÑñ∞, »αѪñÑ τѼ óδºóáΓ∞ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε kill, ¿ß»«½¡∩ÑΓ ¬«¼á¡ñπ chmk (»Ñ-
- αÑóÑßΓ¿ »α«µÑßß ó αѪ¿¼ ∩ñαá) »« áñαÑßπ 10a. ÇñαÑß ó«ºóαáΓá ¿º ß¿ßΓѼ¡«⌐
- Σπ¡¬µ¿¿ - 10c. é« óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ∩ñα« »«ßδ½áÑΓ »α«µÑßßπ
- ß¿ú¡á½ « »αÑαδóá¡¿¿. ƒñα« «íαáΘáÑΓ ó¡¿¼á¡¿Ñ ¡á φΓ«Γ ß¿ú¡á½ Γ«úñá, ¬«úñá »α«-
- µÑßß ß«í¿αáÑΓß∩ óÑα¡πΓ∞ß∩ ó αѪ¿¼ ºáñáτ¿, óδí¿αá∩ ¿º ß«σαá¡Ñ¡¡«ú« αÑú¿ßΓα«-
- ó«ú« ¬«¡ΓѬßΓá áñαÑß ó«ºóαáΓá 10c ¿ »«¼ÑΘá∩ Ñú« ó ßΓѬ ºáñáτ¿. Åα¿ φΓ«¼ áñ-
-
- 192
-
- αÑß Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á, 104, ∩ñα« »«¼ÑΘáÑΓ ó ß«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓα«óδ⌐
- ¬«¡ΓѬßΓ ºáñáτ¿. ìá É¿ßπ¡¬Ñ 7.11 »«¬áºá¡δ αẽ¿τ¡δÑ ß«ßΓ«∩¡¿∩ ßΓÑ¬á ºáñáτ¿ ¿
- ß«σαá¡Ñ¡¡«ú« αÑú¿ßΓα«ó«ú« ¬«¡ΓѬßΓá.
- é αáßß¼«ΓαÑ¡¡«¼ á½ú«α¿Γ¼Ñ «íαáí«Γ¬¿ ß¿ú¡á½«ó ¿¼ÑεΓß∩ ¡Ñ¬«Γ«αδÑ ¡Ñß««Γ-
- óÑΓßΓó¿∩. ÅÑαó«Ñ ¿º ¡¿σ ¿ ¡á¿í«½ÑÑ ó᪡«Ñ ßó∩ºá¡« ß «τ¿ßΓ¬«⌐ »ÑαÑñ ó«ºóαáΘÑ-
- ¡¿Ñ¼ »α«µÑßßá ó αѪ¿¼ ºáñáτ¿ Γ«ú« »«½∩ ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá, ¬«Γ«α«Ñ ß«-
- ñÑαª¿Γ áñαÑß »«½∞º«óáΓѽ∞߬«⌐ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á. àß½¿ »α«µÑßßπ ß¡«óá
- »«¡áñ«í¿Γß∩ «íαáí«ΓáΓ∞ ß¿ú¡á½, Ñ¼π «»∩Γ∞ »α¿ñÑΓß∩ »α¿íÑú¡πΓ∞ ¬ »«¼«Θ¿ ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿ signal. Åα¿ φΓ«¼ ¼«úπΓ ó«º¡¿¬¡πΓ∞ ¡ÑªÑ½áΓѽ∞¡δÑ »«ß½Ññß-
-
- ┌───────────────────────────────────────────┐
- │ #include <signal.h> │
- │ main() │
- │ { │
- │ extern catcher(); │
- │ signal(SIGINT,catcher); │
- │ kill(0,SIGINT); │
- │ } │
- │ │
- │ catcher() │
- │ { │
- │ } │
- └───────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.9. êßσ«ñ¡δ⌐ ΓѬßΓ »α«úαá¼¼δ »α¿Ñ¼á ß¿ú¡á½«ó
-
- ┌────────────────────────────────────────────────────────┐
- │ **** VAX DISASSEMBLER **** │
- │ │
- │ _main() │
- │ e4: │
- │ e6: pushab Ox18(pc) │
- │ ec: pushl $Ox2 │
- │ # ó ß½ÑñπεΘÑ⌐ ßΓα«¬Ñ óδºδóáÑΓß∩ Σπ¡¬µ¿∩ signal │
- │ ee: calls $Ox2,Ox23(pc) │
- │ f5: pushl $Ox2 │
- │ f7: clrl -(sp) │
- │ # ó ß½ÑñπεΘÑ⌐ ßΓα«¬Ñ óδºδóáÑΓß∩ í¿í½¿«ΓÑτ¡á∩ »α«µÑñπ-│
- │ αá kill │
- │ f9: calls $Ox2,Ox8(pc) │
- │ 100: ret │
- │ 101: halt │
- │ 102: halt │
- │ 103: halt │
- │ _catcher() │
- │ 104: │
- │ 106: ret │
- │ 107: halt │
- │ _kill() │
- │ 108: │
- │ # ó ß½ÑñπεΘÑ⌐ ßΓα«¬Ñ óδºδóáÑΓß∩ ó¡πΓαÑ¡¡ÑÑ »αÑαδóá¡¿Ñ│
- │ «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼδ │
- │ 10a: chmk $Ox25 │
- │ 10c: bgequ Ox6 <Ox114> │
- │ 10e: jmp Ox14(pc) │
- │ 114: clrl r0 │
- │ 116: ret │
- └────────────────────────────────────────────────────────┘
- É¿ßπ¡«¬ 7.10. ÉѺπ½∞ΓáΓ ñ¿ßáßßÑ¼í½¿α«óá¡¿∩ »α«úαá¼¼δ »α¿Ñ¼á ß¿ú¡á½«ó
-
- 193
-
-
-
-
- ä« Å«ß½Ñ
- │ │ │ │
- │ │ ┌──>├────────────────────┤
- │ │ éÑαΦ¿¡á │ │ ì«óá∩ ºá»¿ß∞ ß óδ- │
- │ │ ┌── ßΓѬá ──┘ │ º«ó«¼ Σπ¡¬µ¿¿ │
- │ │ │ ºáñáτ¿ │ │
- │ │ │ ∙∙∙∙>│ÇñαÑß ó«ºóαáΓá (10c)│
- ├────────────────────┤<──┘ ∙ ├────────────────────┤
- │ æΓѬ ºáñáτ¿ │ ∙ │ æΓѬ ºáñáτ¿ │
- │ ñ« │ ∙ │ ñ« │
- │ »«½πτÑ¡¿∩ ß¿ú¡á½á │ ∙ │ »«½πτÑ¡¿∩ ß¿ú¡á½á │
- └────────────────────┘ ∙ └────────────────────┘
- æΓѬ ºáñáτ¿ ∙ æΓѬ ºáñáτ¿
- ∙
- ┌────────────────────┐ ∙ ┌────────────────────┐
- │ ÇñαÑß ó«ºóαáΓá │ ∙ │ ÇñαÑß ó«ºóαáΓá │
- │ ó »α«µÑßßÑ (10c) ∙│∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙∙ │ ó »α«µÑßßÑ (104) │
- ├────────────────────┤ ├────────────────────┤
- │ æ«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓ-│ │ æ«σαá¡Ñ¡¡δ⌐ αÑú¿ßΓ-│
- │ α«óδ⌐ ¬«¡ΓѬßΓ ºá- │ │ α«óδ⌐ ¬«¡ΓѬßΓ ºá- │
- │ ñáτ¿ │ │ ñáτ¿ │
- └────────────────────┘ └────────────────────┘
- æ¿ßΓѼ¡δ⌐ ¬«¡ΓѬßΓ¡δ⌐ æ¿ßΓѼ¡δ⌐ ¬«¡ΓѬßΓ¡δ⌐
- πα«óÑ¡∞ 1 πα«óÑ¡∞ 1
- Äí½áßΓ∞ ß«σαá¡Ñ¡¿∩ Äí½áßΓ∞ ß«σαá¡Ñ¡¿∩
- αÑú¿ßΓα«ó αÑú¿ßΓα«ó
-
- É¿ßπ¡«¬ 7.11. æΓѬ ºáñáτ¿ ¿ «í½áßΓ∞ ß«σαá¡Ñ¡¿∩ ßΓαπ¬Γπα ∩ñαá
- ñ« ¿ »«ß½Ñ »«½πτÑ¡¿∩ ß¿ú¡á½á
-
-
- Γó¿∩: ¡á»α¿¼Ñα, ¼«úπΓ ß«ºñáßΓ∞ß∩ πß½«ó¿∩ ñ½∩ ¬«¡¬παÑ¡µ¿¿, Ñß½¿ óΓ«α«⌐ αáº
- ß¿ú¡á½ »«ßΓπ»¿Γ ñ« Γ«ú«, ¬á¬ »α«µÑßß »«½πτ¿Γ 󫺼«ª¡«ßΓ∞ ºá»πßΓ¿Γ∞ ß¿ßΓѼ¡πε
- Σπ¡¬µ¿ε. ū߬«½∞¬π »α«µÑßß óδ»«½¡∩ÑΓß∩ ó αѪ¿¼Ñ ºáñáτ¿, ∩ñαπ ß½Ññ«óὫ íδ
- »α«¿ºóÑßΓ¿ »ÑαѬ½ετÑ¡¿Ñ ¬«¡ΓѬßΓá, τΓ«íδ πóѽ¿τ¿Γ∞ ΓѼ ßá¼δ¼ Φá¡ßδ »α«µÑßßá
- ¡á »«½πτÑ¡¿Ñ ß¿ú¡á½á ñ« ¼«¼Ñ¡Γá ßíα«ßá º¡áτÑ¡¿∩ »«½∩ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú-
- ¡á½á.
- ¥Γπ ß¿Γπáµ¿ε ¼«ª¡« αẫíαáΓ∞ ¡á »α¿¼ÑαÑ »α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿-
- ßπ¡¬Ñ 7.12. Åα«µÑßß «íαáΘáÑΓß∩ ¬ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ signal ñ½∩ Γ«ú«, τΓ«íδ
- ñáΓ∞ π¬áºá¡¿Ñ »α¿¡¿¼áΓ∞ ß¿ú¡á½δ « »αÑαδóá¡¿∩σ ¿ ¿ß»«½¡∩Γ∞ »« ¿σ »«½πτÑ¡¿¿
- Σπ¡¬µ¿ε sigcatcher. çáΓѼ «¡ »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß, ºá»π߬áÑΓ ß¿ßΓѼ¡πε
- Σπ¡¬µ¿ε nice, »«ºó«½∩εΘπε ßñѽáΓ∞ »α¿«α¿ΓÑΓ ºá»πß¬á »α«µÑßßá-α«ñ¿Γѽ∩ ¡¿ªÑ
- »α¿«α¿ΓÑΓá Ñú« »«Γ«¼¬á (ß¼. ú½áóπ 8), ¿ óσ«ñ¿Γ ó íÑ߬«¡Ñτ¡δ⌐ µ¿¬½. Å«α«ªñÑ¡-
- ¡δ⌐ »α«µÑßß ºáñÑনóáÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ¡á 5 ßѬπ¡ñ, τΓ«íδ ñáΓ∞ α«ñ¿Γѽ∞߬«-
- ¼π »α«µÑßßπ óαѼ∩ ¿ß»«½¡¿Γ∞ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε nice ¿ ß¡¿º¿Γ∞ ßó«⌐ »α¿«α¿ΓÑΓ.
- Å«ß½Ñ φΓ«ú« »«α«ªñÑ¡¡δ⌐ »α«µÑßß óσ«ñ¿Γ ó µ¿¬½, ó ¬áªñ«⌐ ¿ΓÑαᵿ¿ ¬«Γ«α«ú« «¡
- »«ßδ½áÑΓ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ ß¿ú¡á½ « »αÑαδóá¡¿¿ (»«ßαÑñßΓó«¼ «íαáΘÑ¡¿∩ ¬
- Σπ¡¬µ¿¿ kill). àß½¿ ó αѺπ½∞ΓáΓÑ «Φ¿í¬¿, ¡á»α¿¼Ñα, ¿º-ºá Γ«ú«, τΓ« α«ñ¿Γѽ∞-
- ߬¿⌐ »α«µÑßß í«½∞ΦÑ ¡Ñ ßπΘÑßΓóπÑΓ, kill ºáóÑαΦáÑΓß∩, Γ« ºáóÑαΦáÑΓß∩ ¿ »«α«ª-
- ñÑ¡¡δ⌐ »α«µÑßß. éß∩ ¿ñÑ∩ ß«ßΓ«¿Γ ó Γ«¼, τΓ« α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ ß½ÑñπÑΓ
- ºá»π߬áΓ∞ Σπ¡¬µ¿ε «íαáí«Γ¬¿ ß¿ú¡á½á »α¿ ¬áªñ«¼ »«½πτÑ¡¿¿ ß¿ú¡á½á « »αÑαδóá-
- ¡¿¿. öπ¡¬µ¿∩ «íαáí«Γ¬¿ ß¿ú¡á½á óδó«ñ¿Γ ß««íΘÑ¡¿Ñ ¿ ß¡«óá «íαáΘáÑΓß∩ ¬ Σπ¡¬-
- µ¿¿ signal »α¿ «τÑαÑñ¡«¼ »«∩ó½Ñ¡¿¿ ß¿ú¡á½á « »αÑαδóá¡¿¿, α«ñ¿Γѽ∞߬¿⌐ ªÑ
- »α«µÑßß »α«ñ«½ªáÑΓ
-
-
-
- 194
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <signal.h> │
- │ sigcatcher() │
- │ { │
- │ printf("PID %d »α¿¡∩½ ß¿ú¡á½\n",getpid()); /* »ÑτáΓ∞ │
- │ PID */ │
- │ signal(SIGINT,sigcatcher); │
- │ } │
- │ │
- │ main() │
- │ { │
- │ int ppid; │
- │ │
- │ signal(SIGINT,sigcatcher); │
- │ │
- │ if (fork() == 0) │
- │ { │
- │ /* ñáΓ∞ »α«µÑßßá¼ óαѼ∩ ñ½∩ óδ»«½¡Ñ¡¿∩ πßΓá¡«ó«¬ */ │
- │ sleep(5); /* í¿í½¿«ΓÑτ¡á∩ Σπ¡¬µ¿∩ »α¿«ßΓá¡«óá ¡á│
- │ 5 ßѬπ¡ñ */ │
- │ ppid = getppid(); /* »«½πτ¿Γ∞ ¿ñÑ¡Γ¿Σ¿¬áΓ«α α«ñ¿ΓÑ- │
- │ ½∩ */ │
- │ for (;;) │
- │ if (kill(ppid,SIGINT) == -1) │
- │ exit(); │
- │ } │
- │ │
- │ /* τѼ ¡¿ªÑ »α¿«α¿ΓÑΓ, ΓѼ óδΦÑ Φá¡ßδ 󫺡¿¬¡«óÑ¡¿∩ ¬«¡-│
- │ ¬παÑ¡µ¿¿ */ │
- │ nice(10); │
- │ for (;;) │
- │ ; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.12. Åα«úαá¼¼á, ñѼ«¡ßΓα¿απεΘá∩ 󫺡¿¬¡«óÑ¡¿Ñ ß«»Ñα¡¿τÑßΓóá
- ¼Ñªñπ »α«µÑßßἿ ó σ«ñÑ «íαáí«Γ¬¿ ß¿ú¡á½«ó
-
- ¿ß»«½¡∩Γ∞ µ¿¬½¿τÑ߬¿⌐ ¡áí«α ¬«¼á¡ñ.
- Äñ¡á¬«, 󫺼«ª¡á ¿ ß½ÑñπεΘá∩ «τÑαÑñ¡«ßΓ∞ ¡áßΓπ»½Ñ¡¿∩ ß«íδΓ¿⌐:
- 1. Å«α«ªñÑ¡¡δ⌐ »α«µÑßß »«ßδ½áÑΓ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ ß¿ú¡á½ « »αÑαδóá¡¿¿.
- 2. É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½ ¿ óδºδóáÑΓ Σπ¡¬µ¿ε «íαáí«Γ¬¿ ß¿ú-
- ¡á½á, ¡« αѺÑαó¿απÑΓß∩ ∩ñα«¼, ¬«Γ«α«Ñ »α«¿ºó«ñ¿Γ »ÑαѬ½ετÑ¡¿Ñ ¬«¡ΓѬßΓá
- ñ« Γ«ú«, ¬á¬ Σπ¡¬µ¿∩ signal íπñÑΓ óδºóá¡á »«óΓ«α¡«.
- 3. æ¡«óá ºá»π߬áÑΓß∩ »«α«ªñÑ¡¡δ⌐ »α«µÑßß, ¬«Γ«αδ⌐ »«ßδ½áÑΓ α«ñ¿Γѽ∞߬«¼π
- »α«µÑßßπ ÑΘÑ «ñ¿¡ ß¿ú¡á½ « »αÑαδóá¡¿¿.
- 4. É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß »«½πτáÑΓ óΓ«α«⌐ ß¿ú¡á½ « »αÑαδóá¡¿¿, ¡« »ÑαÑñ ΓѼ
- «¡ ¡Ñ π߻ѽ ßñѽáΓ∞ ¡¿¬á¬¿σ αáß»«α∩ªÑ¡¿⌐ «Γ¡«ß¿Γѽ∞¡« ß»«ß«íá «íαáí«Γ¬¿
- ß¿ú¡á½á. è«úñá óδ»«½¡Ñ¡¿Ñ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá íπñÑΓ ó«º«í¡«ó½Ñ¡«, «¡
- ºáóÑαΦ¿Γß∩.
- é »α«úαá¼¼Ñ «»¿ßδóáÑΓß∩ ¿¼Ñ¡¡« Γá¬«Ñ »«óÑñÑ¡¿Ñ »α«µÑßß«ó, »«ß¬«½∞¬π óδ-
- º«ó α«ñ¿Γѽ∞߬¿¼ »α«µÑßß«¼ Σπ¡¬µ¿¿ nice »α¿ó«ñ¿Γ ¬ Γ«¼π, τΓ« ∩ñα« íπñÑΓ τáΘÑ
- ºá»π߬áΓ∞ ¡á óδ»«½¡Ñ¡¿Ñ »«α«ªñÑ¡¡δ⌐ »α«µÑßß.
- Å« ß½«óá¼ É¿τ¿ (φΓ¿ ßóÑñÑ¡¿∩ í뫨 »«½πτÑ¡δ ó τáßΓ¡«⌐ íÑßÑñÑ), ß¿ú¡á½δ
- í뫨 ºáñπ¼á¡δ ¬á¬ ß«íδΓ¿∩, ¬«Γ«αδÑ ¼«úπΓ íδΓ∞ ¬á¬ ΣáΓá½∞¡δ¼¿, Γᬠ¿ »α«σ«ñ∩-
- Θ¿¼¿ ¡Ñºá¼ÑΓ¡«, ¬«Γ«αδÑ ¡Ñ óßÑúñá «íαáíáΓδóáεΓß∩, »«φΓ«¼π ó αá¡¡¿σ óÑαß¿∩σ
- ß¿ßΓÑ¼δ ¬«¡¬παÑ¡µ¿∩ »α«µÑßß«ó, ßó∩ºá¡¡á∩ ß »«ß佬«⌐ ß¿ú¡á½«ó, ¡Ñ Σ¿¬ß¿α«óá-
- ½áß∞. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, «¡á »αÑñßΓáó½∩ÑΓ ßÑα∞Ѻ¡πε »α«í½Ñ¼π ó ΓÑσ »α«úαá¼¼áσ,
- úñÑ «ßπΘÑßΓó½∩ÑΓß∩ »α¿Ñ¼ ß¿ú¡á½«ó. ¥Γá »α«í½Ñ¼á íδ½á íδ πßΓαá¡Ñ¡á, Ñß½¿ íδ
-
- 195
-
- »«½Ñ «»¿ßá¡¿∩ ß¿ú¡á½á ¡Ñ «τ¿ΘὫß∞ »« Ñú« »«½πτÑ¡¿¿. Äñ¡á¬«, Γá¬«Ñ αÑΦÑ¡¿Ñ
- »«α«ñ¿½« íδ ¡«óπε »α«í½Ñ¼π: Ñß½¿ »«ßΓπ»áεΘ¿⌐ ß¿ú¡á½ »α¿¡¿¼áÑΓß∩, á »«½Ñ «τ¿-
- ΘÑ¡«, 󽫪ѡ¡δÑ «íαáΘÑ¡¿∩ ¬ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á ¼«úπΓ »ÑαÑ»«½¡¿Γ∞
- ßΓѬ. æ ñαπú«⌐ ßΓ«α«¡δ, ∩ñα« ¼«ú½« íδ ßíα«ß¿Γ∞ º¡áτÑ¡¿Ñ Σπ¡¬µ¿¿ «íαáí«Γ¬¿
- ß¿ú¡á½á, ΓѼ ßá¼δ¼ ñѽá∩ αáß»«α∩ªÑ¡¿Ñ ¿ú¡«α¿α«óáΓ∞ ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á ñ«
- ΓÑσ »«α, »«¬á »«½∞º«óáΓѽ∞ ó¡«ó∞ ¡Ñ π¬áªÑΓ, τΓ« ¡πª¡« ñѽáΓ∞ »« »«½πτÑ¡¿¿
- »«ñ«í¡δσ ß¿ú¡á½«ó. Æá¬«Ñ αÑΦÑ¡¿Ñ »αÑñ»«½áúáÑΓ »«ΓÑαε ¿¡Σ«α¼áµ¿¿, Γᬠ¬á¬
- »α«µÑßß ¡Ñ ó ß«ßΓ«∩¡¿¿ πº¡áΓ∞, ߬«½∞¬« ß¿ú¡á½«ó ¿¼ í佫 »«½πτÑ¡«. Äñ¡á¬«,
- ¿¡Σ«α¼áµ¿¿ »α¿ φΓ«¼ ΓÑα∩ÑΓß∩ ¡Ñ í«½∞ΦÑ, τѼ ó Γ«¼ ß½πτáÑ, ¬«úñá »α«µÑßß »«-
- ½πτáÑΓ í«½∞Φ«Ñ ¬«½¿τÑßΓó« ß¿ú¡á½«ó «ñ¡«ú« Γ¿»á ñ« Γ«ú«, ¬á¬ »«½πτáÑΓ ó«º¼«ª-
- ¡«ßΓ∞ ¿σ «íαáí«ΓáΓ∞. é ß¿ßΓÑ¼Ñ BSD, ¡á¬«¡Ñµ, »α«µÑßß ¿¼ÑÑΓ ó«º¼«ª¡«ßΓ∞ í½«-
- ¬¿α«óáΓ∞ »«½πτÑ¡¿Ñ ß¿ú¡á½«ó ¿ ß¡¿¼áΓ∞ í½«¬¿α«ó¬π »α¿ ¡«ó«¼ «íαáΘÑ¡¿¿ ¬ ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿; ¬«úñá »α«µÑßß ß¡¿¼áÑΓ í½«¬¿α«ó¬π ß¿ú¡á½«ó, ∩ñα« »«ßδ½áÑΓ
- »α«µÑßßπ óßÑ ß¿ú¡á½δ, «Γ½«ªÑ¡¡δÑ (»«ó¿ßΦ¿Ñ) ß ¼«¼Ñ¡Γá πßΓá¡«ó¬¿ í½«¬¿α«ó¬¿.
- è«úñá »α«µÑßß »«½πτáÑΓ ß¿ú¡á½, ∩ñα« áóΓ«¼áΓ¿τÑ߬¿ í½«¬¿απÑΓ »«½πτÑ¡¿Ñ ß½Ññπ-
- εΘÑú« ß¿ú¡á½á ñ« ΓÑσ »«α, »«¬á Σπ¡¬µ¿∩ «íαáí«Γ¬¿ ß¿ú¡á½á ¡Ñ ºá¬«¡τ¿Γ αáí«Γπ.
- é φΓ¿σ ñÑ⌐ßΓó¿∩σ ∩ñαá ¡áí½εñáÑΓß∩ á¡á½«ú¿∩ ß ΓѼ, ¬á¬ ∩ñα« αÑáú¿απÑΓ ¡á á»-
- »áαáΓ¡δÑ »αÑαδóá¡¿∩: «¡« í½«¬¿απÑΓ »«∩ó½Ñ¡¿Ñ ¡«óδσ »αÑαδóá¡¿⌐ ¡á óαѼ∩ «íαá-
- í«Γ¬¿ »αÑñδñπΘ¿σ.
- éΓ«α«Ñ ¡Ñß««ΓóÑΓßΓó¿Ñ ó «íαáí«Γ¬Ñ ß¿ú¡á½«ó ßó∩ºá¡« ß »α¿Ñ¼«¼ ß¿ú¡á½«ó,
- »«ßΓπ»áεΘ¿σ ó« óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿, ¬«úñá »α«µÑßß »α¿«ßΓá¡«ó-
- ½Ñ¡ ß ñ«»π߬áεΘ¿¼ »αÑαδóá¡¿∩ »α¿«α¿ΓÑΓ«¼. æ¿ú¡á½ »«íπªñáÑΓ »α«µÑßß óδ⌐Γ¿ ¿º
- »α¿«ßΓá¡«óá (ß »«¼«Θ∞ε longjump), óÑα¡πΓ∞ß∩ ó αѪ¿¼ ºáñáτ¿ ¿ óδºóáΓ∞ Σπ¡¬µ¿ε
- «íαáí«Γ¬¿ ß¿ú¡á½á. è«úñá Σπ¡¬µ¿∩ «íαáí«Γ¬¿ ß¿ú¡á½á ºáóÑαΦáÑΓ αáí«Γπ, »α«¿ß-
- σ«ñ¿Γ Γ«, τΓ« »α«µÑßß óδσ«ñ¿Γ ¿º ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ß «Φ¿í¬«⌐, ß««íΘáεΘÑ⌐ «
- »αÑαδóá¡¿¿ ÑÑ óδ»«½¡Ñ¡¿∩. ôº¡áó «í «Φ¿í¬Ñ, »«½∞º«óáΓѽ∞ ºá»π߬áÑΓ ß¿ßΓѼ¡πε
- Σπ¡¬µ¿ε »«óΓ«α¡«, «ñ¡á¬« í«½ÑÑ πñ«í¡« í佫 íδ, Ñß½¿ íδ φΓ« ñÑ⌐ßΓó¿Ñ áóΓ«¼á-
- Γ¿τÑ߬¿ óδ»«½¡∩½«ß∞ ∩ñα«¼, ¬á¬ ó ß¿ßΓÑ¼Ñ BSD.
- ÆαÑΓ∞Ñ ¡Ñß««ΓóÑΓßΓó¿Ñ »α«∩ó½∩ÑΓß∩ ó Γ«¼ ß½πτáÑ, ¬«úñá »α«µÑßß ¿ú¡«α¿απÑΓ
- »«ßΓπ»¿óΦ¿⌐ ß¿ú¡á½. àß½¿ ß¿ú¡á½ »«ßΓπ»áÑΓ ó Γ« óαѼ∩, ¬«úñá »α«µÑßß ¡áσ«ñ¿Γ-
- ß∩ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá ß ñ«»π߬áεΘ¿¼ »αÑαδóá¡¿∩ »α¿«α¿ΓÑΓ«¼, »α«µÑßß ó«-
- º«í¡«ó½∩ÑΓß∩, ¡« ¡Ñ óδ»«½¡∩ÑΓ longjump. äαπú¿¼¿ ß½«óἿ, ∩ñα« πº¡áÑΓ « Γ«¼,
- τΓ« »α«µÑßß »α«¿ú¡«α¿α«óá½ »«ßΓπ»¿óΦ¿⌐ ß¿ú¡á½ Γ«½∞¬« »«ß½Ñ ó«º«í¡«ó½Ñ¡¿∩ Ñú«
- óδ»«½¡Ñ¡¿∩. ï«ú¿τ¡ÑÑ í佫 íδ «ßΓáó¿Γ∞ »α«µÑßß ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá. Äñ¡á-
- ¬«, ó ¼«¼Ñ¡Γ »«ß佬¿ ß¿ú¡á½á ¬ »α«ßΓαá¡ßΓóπ »α«µÑßßá, ó ¬«Γ«α«¼ ∩ñα« σαá¡¿Γ
- áñαÑß Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á, ¼«ªÑΓ «ΓßπΓßΓó«óáΓ∞ ñ«ßΓπ». ¥Γá »α«í½Ñ¼á
- ¼«ªÑΓ íδΓ∞ αÑΦÑ¡á »πΓѼ ºá»«¼¿¡á¡¿∩ áñαÑßá Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á ó ºá»¿-
- ß¿ Γáí½¿µδ »α«µÑßß«ó, «íαáΘá∩ß∞ ¬ ¬«Γ«α«⌐, ∩ñα« »«½πτὫ íδ 󫺼«ª¡«ßΓ∞ αÑ-
- ΦáΓ∞ ó«»α«ß « ¡Ñ«íσ«ñ¿¼«ßΓ¿ ó«º«í¡«ó½Ñ¡¿∩ »α«µÑßßá »« »«½πτÑ¡¿¿ ß¿ú¡á½á. æ
- ñαπú«⌐ ßΓ«α«¡δ, »α«µÑßß ¼«ªÑΓ ¡Ñ¼Ññ½Ñ¡¡« óÑα¡πΓ∞ß∩ ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá
- (»« á½ú«α¿Γ¼π sleep), Ñß½¿ «í¡áαπª¿Γ, τΓ« ó Ñú« ó«º«í¡«ó½Ñ¡¿¿ ¡Ñ í佫 ¡Ñ«í-
- σ«ñ¿¼«ßΓ¿. Äñ¡á¬«, »«½∞º«óáΓѽ∞߬¿Ñ »α«µÑßßδ ¡Ñ ¿¼ÑεΓ ó«º¼«ª¡«ßΓ¿ «ß«º¡áóáΓ∞
- ß«íßΓóÑ¡¡«Ñ ó«º«í¡«ó½Ñ¡¿Ñ, »«ß¬«½∞¬π ∩ñα« αáß»«½áúáÑΓ Γ«τ¬π óσ«ñá ó á½ú«α¿Γ¼
- sleep ó¡πΓα¿ µ¿¬½á ß πß½«ó¿Ñ¼ »α«ñ«½ªÑ¡¿∩ (ß¼. ú½áóπ 2), »ÑαÑó«ñ∩ »α«µÑßß
- ó¡«ó∞ ó ß«ßΓ«∩¡¿Ñ »α¿«ßΓá¡«óá, Ñß½¿ «ª¿ñáѼ«Ñ »α«µÑßß«¼ ß«íδΓ¿Ñ ó ñÑ⌐ßΓó¿-
- Γѽ∞¡«ßΓ¿ ¡Ñ ¿¼Ñ½« ¼ÑßΓá.
- è« óßѼπ ߬áºá¡¡«¼π óδΦÑ ß½ÑñπÑΓ ñ«íáó¿Γ∞, τΓ« ∩ñα« «íαáíáΓδóáÑΓ ß¿ú¡á½δ
- Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á" ¡Ñ Γá¬, ¬á¬ ñαπú¿Ñ ß¿ú¡á½δ. é τáßΓ¡«ßΓ¿, ¬«úñá »α«µÑßß
- πº¡áÑΓ « »«½πτÑ¡¿¿ ß¿ú¡á½á "ú¿íѽ∞ »«Γ«¼¬á", «¡ ó䬽ετáÑΓ ¿¡ñ¿¬áµ¿ε ß¿ú¡á½á
- ó ß««ΓóÑΓßΓóπεΘѼ »«½Ñ ºá»¿ß¿ Γáí½¿µδ »α«µÑßß«ó ¿ »« π¼«½τá¡¿ε ñÑ⌐ßΓóπÑΓ
- Γá¬, ß½«ó¡« ¡¿¬á¬«ú« ß¿ú¡á½á ¿ ¡Ñ »«ßΓπ»á½«. ìạáτÑ¡¿Ñ ß¿ú¡á½á "ú¿íѽ∞ »«-
- Γ«¼¬á" ß«ßΓ«¿Γ ó ó«º«í¡«ó½Ñ¡¿¿ óδ»«½¡Ñ¡¿∩ »α«µÑßßá, »α¿«ßΓá¡«ó½Ñ¡¡«ú« ß ñ«-
- »π߬áεΘ¿¼ »αÑαδóá¡¿∩ »α¿«α¿ΓÑΓ«¼. àß½¿ »α«µÑßß »α¿¡¿¼áÑΓ Γᬫ⌐ ß¿ú¡á½, «¡,
- ¬á¬ ¿ ó« óßÑσ «ßΓá½∞¡δσ ß½πτá∩σ, ºá»π߬áÑΓ Σπ¡¬µ¿ε «íαáí«Γ¬¿ ß¿ú¡á½á. äÑ⌐ßΓ-
- ó¿∩, »αÑñ»α¿¡¿¼áѼδÑ ∩ñα«¼ ó Γ«¼ ß½πτáÑ, ¬«úñá »α«µÑßß ¿ú¡«α¿απÑΓ »«ßΓπ»¿ó-
- Φ¿⌐ ß¿ú¡á½ φΓ«ú« Γ¿»á, íπñπΓ «»¿ßá¡δ ó αáºñÑ½Ñ 7.4. ìᬫ¡Ñµ, ¬«úñá »α«µÑßß
- óδºóá½ Σπ¡¬µ¿ε signal ß »áαá¼ÑΓα«¼ "ú¿íѽ∞ »«Γ«¼¬á" (death of child), ∩ñα«
- »«ßδ½áÑΓ Ñ¼π ß««ΓóÑΓßΓóπεΘ¿⌐ ß¿ú¡á½, Ñß½¿ «¡ ¿¼ÑÑΓ »«Γ«¼¬«ó, »αѬαáΓ¿óΦ¿σ
- ßπΘÑßΓó«óá¡¿Ñ. é αáºñÑ½Ñ 7.4 ¡á φΓ«¼ ¼«¼Ñ¡ΓÑ ¼δ «ßΓá¡«ó¿¼ß∩ í«½ÑÑ »«ñα«í¡«.
-
- 196
-
-
- E7.2.2 âαπ»»δ »α«µÑßß«óF
-
- ìÑß¼«Γα∩ ¡á Γ«, τΓ« ó ß¿ßΓÑ¼Ñ UNIX »α«µÑßßδ ¿ñÑ¡Γ¿Σ¿µ¿απεΓß∩ π¡¿¬á½∞¡δ¼
- ¬«ñ«¼ (PID), ß¿ßΓÑ¼Ñ ¿¡«úñá »α¿σ«ñ¿Γß∩ ¿ß»«½∞º«óáΓ∞ ñ½∩ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »α«-
- µÑßß«ó ¡«¼Ñα "úαπ»»δ", ó ¬«Γ«απε «¡¿ óσ«ñ∩Γ. ìá»α¿¼Ñα, »α«µÑßßδ, ¿¼ÑεΘ¿Ñ «í-
- ΘÑú« »αÑñ¬á ó ½¿µÑ αÑú¿ßΓαᵿ«¡¡«ú« shell'á, óºá¿¼«ßó∩ºá¡δ, ¿ »«φΓ«¼π ¬«úñá
- »«½∞º«óáΓѽ∞ ¡áª¿¼áÑΓ ¬½áó¿Φ¿ "delete" ¿½¿ "break", ¿½¿ ¬«úñá ΓÑନ¡á½∞¡á∩
- ½¿¡¿∩ "ºáó¿ßáÑΓ", óßÑ φΓ¿ »α«µÑßßδ »«½πτáεΓ ß««ΓóÑΓßΓóπεΘ¿Ñ ß¿ú¡á½δ. ƒñα«
- ¿ß»«½∞ºπÑΓ ¬«ñ úαπ»»δ »α«µÑßß«ó ñ½∩ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ úαπ»»δ óºá¿¼«ßó∩ºá¡¡δσ
- »α«µÑßß«ó, ¬«Γ«αδÑ »α¿ ¡áßΓπ»½Ñ¡¿¿ «»αÑñѽѡ¡δσ ß«íδΓ¿⌐ ñ«½ª¡δ »«½πτáΓ∞ «í-
- Θ¿⌐ ß¿ú¡á½. è«ñ úαπ»»δ ºá»«¼¿¡áÑΓß∩ ó Γáí½¿µÑ »α«µÑßß«ó; »α«µÑßßδ ¿º «ñ¡«⌐
- úαπ»»δ ¿¼ÑεΓ «ñ¿¡ ¿ ëà ªÑ ¬«ñ úαπ»»δ.
- ä½∩ Γ«ú«, τΓ«íδ »α¿ßó«¿Γ∞ ¬«ñπ úαπ»»δ »α«µÑßß«ó ¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ, »α¿-
- αáó¡∩ó Ñú« ¬«ñπ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »α«µÑßßá, ß½ÑñπÑΓ ó«ß»«½∞º«óáΓ∞ß∩ ß¿ßΓѼ¡«⌐
- Σπ¡¬µ¿Ñ⌐ setpgrp. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
- grp = setpgrp();
- úñÑ grp - ¡«óδ⌐ ¬«ñ úαπ»»δ »α«µÑßß«ó. Åα¿ óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ fork »α«-
- µÑßß-»«Γ«¼«¬ ¡áß½ÑñπÑΓ ¬«ñ úαπ»»δ ßó«Ñú« α«ñ¿Γѽ∩. êß»«½∞º«óá¡¿Ñ Σπ¡¬µ¿¿
- setpgrp »α¿ ¡áº¡áτÑ¡¿¿ ñ½∩ »α«µÑßßá «»ÑαáΓ«α߬«ú« ΓÑନ¡á½á ¿¼ÑÑΓ ó᪡δÑ
- «ß«íÑ¡¡«ßΓ¿, ¡á ¬«Γ«αδÑ ßΓ«¿Γ «íαáΓ¿Γ∞ ó¡¿¼á¡¿Ñ (ß¼. αáºñѽ 10.3.5).
-
-
- E7.2.3 Å«ß佬á ß¿ú¡á½«ó »α«µÑßßἿF
-
- ä½∩ »«ß佬¿ ß¿ú¡á½«ó »α«µÑßßδ ¿ß»«½∞ºπεΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε kill. æ¿¡Γá¬-
- ß¿ß ó맮óá Σπ¡¬µ¿¿:
- kill(pid,signum)
- úñÑ ó pid π¬áºδóáÑΓß∩ áñαÑßáΓ »«ßδ½áѼ«ú« ß¿ú¡á½á («í½áßΓ∞ ñÑ⌐ßΓó¿∩ ß¿ú¡á-
- ½á), á ó signum - ¡«¼Ñα »«ßδ½áѼ«ú« ß¿ú¡á½á. æó∩º∞ ¼Ñªñπ º¡áτÑ¡¿Ñ¼ pid ¿ ß«-
- ó«¬π»¡«ßΓ∞ε óδ»«½¡∩εΘ¿σß∩ »α«µÑßß«ó ß½ÑñπεΘá∩:
- * àß½¿ pid - »«½«ª¿Γѽ∞¡«Ñ µÑ½«Ñ τ¿ß½«, ∩ñα« »«ßδ½áÑΓ ß¿ú¡á½ »α«µÑßßπ ß
- ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid.
- * àß½¿ º¡áτÑ¡¿Ñ pid αáó¡« 0, ß¿ú¡á½ »«ßδ½áÑΓß∩ óßѼ »α«µÑßßá¼, óσ«ñ∩Θ¿¼ ó
- «ñ¡π úαπ»»π ß »α«µÑßß«¼, óδºóáóΦ¿¼ Σπ¡¬µ¿ε kill.
- * àß½¿ º¡áτÑ¡¿Ñ pid αáó¡« -1, ß¿ú¡á½ »«ßδ½áÑΓß∩ óßѼ »α«µÑßßá¼, 𠬫ëαδσ
- αÑá½∞¡δ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ ß«ó»áñáÑΓ ß ΓѼ, »«ñ ¬«Γ«αδ¼ ¿ß-
- »«½¡∩ÑΓß∩ »α«µÑßß, óδºóáóΦ¿⌐ Σπ¡¬µ¿ε kill («í φΓ¿σ ¬«ñáσ í«½ÑÑ »«ñα«í¡«
- ß¼. ó αáºñÑ½Ñ 7.6). àß½¿ »α«µÑßß, »«ß½áóΦ¿⌐ ß¿ú¡á½, ¿ß»«½¡∩ÑΓß∩ »«ñ ¬«-
- ñ«¼ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ßπ»Ñα»«½∞º«óáΓѽ∩, ß¿ú¡á½ αáßßδ½áÑΓß∩ óßѼ »α«µÑßßá¼,
- ¬α«¼Ñ »α«µÑßß«ó ß ¿ñÑ¡Γ¿Σ¿¬áΓ«αἿ 0 ¿ 1.
- * àß½¿ pid - «Γα¿µáΓѽ∞¡«Ñ µÑ½«Ñ τ¿ß½«, ¡« ¡Ñ -1, ß¿ú¡á½ »«ßδ½áÑΓß∩ óßѼ
- »α«µÑßßá¼, óσ«ñ∩Θ¿¼ ó úαπ»»π ß ¡«¼Ñα«¼, αáó¡δ¼ áíß«½εΓ¡«¼π º¡áτÑ¡¿ε pid.
-
- é« óßÑσ ß½πτá∩σ, Ñß½¿ »α«µÑßß, »«ß½áóΦ¿⌐ ß¿ú¡á½, ¿ß»«½¡∩ÑΓß∩ »«ñ ¬«ñ«¼
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩, ¡Ñ ∩ó½∩εΘÑú«ß∩ ßπ»Ñα»«½∞º«óáΓѽѼ, ¿½¿ Ñß½¿ ¬«ñδ
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ (αÑá½∞¡δ⌐ ¿ ¿ß»«½¡¿Γѽ∞¡δ⌐) π φΓ«ú« »α«µÑßßá ¡Ñ
- ß«ó»áñáεΓ ß ß««ΓóÑΓßΓóπεΘ¿¼¿ ¬«ñἿ »α«µÑßßá, »α¿¡¿¼áεΘÑú« ß¿ú¡á½, kill ºá-
- óÑαΦáÑΓß∩ ¡Ñπñáτ¡«.
- é »α«úαá¼¼Ñ, »α¿óÑñÑ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.13, ú½áó¡δ⌐ »α«µÑßß ßíαáßδóáÑΓ πß-
- Γá¡«ó½Ñ¡¡«Ñ αá¡ÑÑ º¡áτÑ¡¿Ñ ¡«¼Ñαá úαπ»»δ ¿ »«α«ªñáÑΓ 10 ¡«óδσ »α«µÑßß«ó. Åα¿
- ᫪ñÑ¡¿¿ ¬áªñδ⌐ »α«µÑßß-»«Γ«¼«¬ ¡áß½ÑñπÑΓ ¡«¼Ñα úαπ»»δ »α«µÑßß«ó ßó«Ñú« α«-
- ñ¿Γѽ∩, «ñ¡á¬«, »α«µÑßßδ, ß«ºñá¡¡δÑ ó ¡ÑτÑΓ¡δσ ¿ΓÑαᵿ∩σ µ¿¬½á, ßíαáßδóáεΓ
- φΓ« º¡áτÑ¡¿Ñ. æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ getpid ¿ getpgrp ó«ºóαáΘáεΓ º¡áτÑ¡¿∩ ¬«ñá
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ óδ»«½¡∩Ѽ«ú« »α«µÑßßá ¿ ¡«¼Ñαá úαπ»»δ, ó ¬«Γ«απε «¡ óσ«ñ¿Γ, á
- Σπ¡¬µ¿∩ pause »α¿«ßΓá¡áó½¿óáÑΓ óδ»«½¡Ñ¡¿Ñ »α«µÑßßá ñ« ¼«¼Ñ¡Γá »«½πτÑ¡¿∩ ß¿ú-
- ¡á½á. é ¬«¡Ñτ¡«¼ ¿Γ«úÑ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ºá»π߬áÑΓ Σπ¡¬µ¿ε kill ¿ »«ßδ½á-
- ÑΓ ß¿ú¡á½ « »αÑαδóá¡¿¿ óßѼ »α«µÑßßá¼, óσ«ñ∩Θ¿¼ ó «ñ¡π ß ¡¿¼ úαπ»»π. ƒñα«
-
-
- 197
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <signal.h> │
- │ main() │
- │ { │
- │ register int i; │
- │ │
- │ setpgrp(); │
- │ for (i = 0; i < 10; i++) │
- │ { │
- │ if (fork() == 0) │
- │ { │
- │ /* »«α«ªñÑ¡¡δ⌐ »α«µÑßß */ │
- │ if (i & 1) │
- │ setpgrp(); │
- │ printf("pid = %d pgrp = %d\n",getpid(),getpgrp());│
- │ pause(); /* ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ »α¿«ßΓá¡«óá óδ- │
- │ »«½¡Ñ¡¿∩ */ │
- │ } │
- │ } │
- │ kill(0,SIGINT); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.13. Åα¿¼Ñα ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿¿ setpgrp
-
-
- »«ßδ½áÑΓ ß¿ú¡á½ »∩Γ¿ "τÑΓ¡δ¼" »α«µÑßßá¼, ¡Ñ ßíα«ß¿óΦ¿¼ π¡áß½Ññ«óá¡¡«Ñ º¡áτÑ-
- ¡¿Ñ ¡«¼Ñαá úαπ»»δ, »α¿ φΓ«¼ »∩Γ∞ "¡ÑτÑΓ¡δσ" »α«µÑßß«ó »α«ñ«½ªáεΓ ßó«Ñ óδ»«½-
- ¡Ñ¡¿Ñ.
-
-
- E7.3 çÇéàÉÿàìêà é¢ÅÄïìàìêƒ ÅÉÄûàææÇF
-
- é ß¿ßΓÑ¼Ñ UNIX »α«µÑßß ºáóÑαΦáÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ, ºá»π߬á∩ ß¿ßΓѼ¡πε
- Σπ¡¬µ¿ε exit. Å«ß½Ñ φΓ«ú« »α«µÑßß »ÑαÑσ«ñ¿Γ ó ß«ßΓ«∩¡¿Ñ "»αѬαáΘÑ¡¿∩ ßπΘÑßΓ-
- ó«óá¡¿∩" (ß¼. É¿ßπ¡«¬ 6.1), «ßó«í«ªñáÑΓ αÑßπαßδ ¿ ½¿¬ó¿ñ¿απÑΓ ßó«⌐ ¬«¡ΓѬßΓ.
- æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
-
- exit(status);
-
- úñÑ status - º¡áτÑ¡¿Ñ, ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ. Åα«µÑß-
- ßδ ¼«úπΓ óδºδóáΓ∞ Σπ¡¬µ¿ε exit ¬á¬ ó ∩ó¡«¼, Γᬠ¿ ó ¡Ñ∩ó¡«¼ ó¿ñÑ (»« «¬«¡τá-
- ¡¿¿ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ: ¡áτá½∞¡á∩ »α«µÑñπαá (startup), ¬«¼»«¡πѼá∩ ß« óßÑ-
- ¼¿ »α«úαἼἿ ¡á ∩ºδ¬Ñ æ¿, óδºδóáÑΓ Σπ¡¬µ¿ε exit ¡á óδσ«ñÑ »α«úαá¼¼δ ¿º
- Σπ¡¬µ¿¿ main, ∩ó½∩εΘÑ⌐ß∩ «íΘÑ⌐ Γ«τ¬«⌐ óσ«ñá ñ½∩ óßÑσ »α«úαá¼¼). æ ñαπú«⌐
- ßΓ«α«¡δ, ∩ñα« ¼«ªÑΓ óδºδóáΓ∞ Σπ¡¬µ¿ε exit »« ßó«Ñ⌐ ¿¡¿µ¿áΓ¿óÑ, Ñß½¿ »α«µÑßß
- ¡Ñ »α¿¡∩½ »«ß½á¡¡δ⌐ Ѽπ ß¿ú¡á½ («í φΓ«¼ ¼δ πªÑ ú«ó«α¿½¿ óδΦÑ). é φΓ«¼ ß½πτáÑ
- º¡áτÑ¡¿Ñ »áαá¼ÑΓαá status αáó¡« ¡«¼Ñαπ ß¿ú¡á½á.
- æ¿ßΓÑ¼á ¡Ñ ¡á¬½áñδóáÑΓ ¡¿¬á¬«ú« «úαá¡¿τÑ¡¿∩ ¡á »α«ñ«½ª¿Γѽ∞¡«ßΓ∞ óδ»«½-
- ¡Ñ¡¿∩ »α«µÑßßá, ¿ ºáτáßΓπε »α«µÑßßδ ßπΘÑßΓóπεΓ ó ΓÑτÑ¡¿Ñ ñ«ó«½∞¡« ñ½¿Γѽ∞¡«-
- ú« óαѼѡ¿. ìπ½Ñó«⌐ »α«µÑßß (»α«úαá¼¼á »«ñ¬áτ¬¿) ¿ »α«µÑßß 1 (init), ¬ »α¿-
- ¼Ñαπ, ßπΘÑßΓóπεΓ ¡á »α«Γ∩ªÑ¡¿¿ óßÑú« óαѼѡ¿ ª¿º¡¿ ß¿ßΓѼδ. Åα«ñ«½ª¿Γѽ∞¡δ¼¿
- »α«µÑßßἿ ∩ó½∩εΓß∩ Γá¬ªÑ getty-»α«µÑßßδ, ¬«¡Γα«½¿απεΘ¿Ñ αáí«Γπ ΓÑନ¡á½∞¡«⌐
- ½¿¡¿¿, «ª¿ñá∩ αÑú¿ßΓαᵿ¿ »«½∞º«óáΓѽÑ⌐, ¿ »α«µÑßßδ «íΘÑú« ¡áº¡áτÑ¡¿∩, óδ-
- »«½¡∩ѼδÑ »«ñ απ¬«ó«ñßΓó«¼ áñ¼¿¡¿ßΓαáΓ«αá.
- ìá É¿ßπ¡¬Ñ 7.14 »α¿óÑñÑ¡ á½ú«α¿Γ¼ Σπ¡¬µ¿¿ exit. æ¡áτá½á ∩ñα« «Γ¼Ñ¡∩ÑΓ
- «íαáí«Γ¬π óßÑσ ß¿ú¡á½«ó, »«ßδ½áѼδσ »α«µÑßßπ, »«ß¬«½∞¬π ÑÑ »α«ñ«½ªÑ¡¿Ñ ßΓá-
- ¡«ó¿Γß∩ íÑßß¼δ߽ѡ¡δ¼. àß½¿ »α«µÑßß, óδºδóáεΘ¿⌐ Σπ¡¬µ¿ε exit, ó«ºú½áó½∩ÑΓ
-
-
- 198
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ exit │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¬«ñ, ó«ºóαáΘáѼδ⌐ α«ñ¿Γѽ∞߬«¼π »α«- │
- │ µÑßßπ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ ¿ú¡«α¿α«óáΓ∞ óßÑ ß¿ú¡á½δ; │
- │ Ñß½¿ (»α«µÑßß ó«ºú½áó½∩ÑΓ úαπ»»π »α«µÑßß«ó, áßß«µ¿¿α«- │
- │ óá¡¡πε ß «»ÑαáΓ«α߬¿¼ ΓÑନ¡á½«¼) │
- │ { │
- │ »«ß½áΓ∞ óßѼ »α«µÑßßá¼, óσ«ñ∩Θ¿¼ ó úαπ»»π, ß¿ú¡á½ « │
- │ "ºáó¿ßá¡¿¿"; │
- │ ßíα«ß¿Γ∞ ó ¡«½∞ ¬«ñ úαπ»»δ »α«µÑßß«ó; │
- │ } │
- │ ºá¬αδΓ∞ óßÑ «Γ¬αδΓδÑ Σá⌐½δ (ó¡πΓαÑ¡¡∩∩ ¼«ñ¿Σ¿¬áµ¿∩ á½ú«-│
- │ α¿Γ¼á close); │
- │ «ßó«í«ñ¿Γ∞ ΓѬπΘ¿⌐ ¬áΓὫú (á½ú«α¿Γ¼ iput); │
- │ «ßó«í«ñ¿Γ∞ «í½áßΓ¿ ¿ »á¼∩Γ∞, áßß«µ¿¿α«óá¡¡πε ß »α«µÑßß«¼│
- │ (á½ú«α¿Γ¼ freereg); │
- │ ß«ºñáΓ∞ ºá»¿ß∞ ß πτÑΓ¡«⌐ ¿¡Σ«α¼áµ¿Ñ⌐; │
- │ »αѬαáΓ¿Γ∞ ßπΘÑßΓó«óá¡¿Ñ »α«µÑßßá (»ÑαÑóÑßΓ¿ Ñú« ó ß««Γ-│
- │ óÑΓßΓóπεΘÑÑ ß«ßΓ«∩¡¿Ñ); │
- │ ¡áº¡áτ¿Γ∞ óßѼ »α«µÑßßá¼-»«Γ«¼¬á¼ ó ¬áτÑßΓóÑ α«ñ¿Γѽ∩ │
- │ »α«µÑßß init (1); │
- │ Ñß½¿ ¬Γ«-½¿í« ¿º »«Γ«¼¬«ó »αѬαáΓ¿½ ßπΘÑßΓó«óá¡¿Ñ, │
- │ »«ß½áΓ∞ »α«µÑßßπ init ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á"; │
- │ »«ß½áΓ∞ ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á" α«ñ¿Γѽε ñá¡¡«ú« »α«µÑß-│
- │ ßá; │
- │ »ÑαѬ½ετ¿Γ∞ ¬«¡ΓѬßΓ; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.14. ǽú«α¿Γ¼ Σπ¡¬µ¿¿ exit
-
- úαπ»»π »α«µÑßß«ó, áßß«µ¿¿α«óá¡¡πε ß «»ÑαáΓ«α߬¿¼ ΓÑନ¡á½«¼ (ß¼. αáºñѽ
- 10.3.5), ∩ñα« ñѽáÑΓ »αÑñ»«½«ªÑ¡¿Ñ « Γ«¼, τΓ« »«½∞º«óáΓѽ∞ »αѬαáΘáÑΓ αáí«-
- Γπ, ¿ »«ßδ½áÑΓ óßѼ »α«µÑßßá¼ ó úαπ»»Ñ ß¿ú¡á½ « "ºáó¿ßá¡¿¿". Æá¬¿¼ «íαẫ¼,
- Ñß½¿ »«½∞º«óáΓѽ∞ ó αÑú¿ßΓαᵿ«¡¡«¼ shell'Ñ ¡áª¼ÑΓ »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ¬½á-
- ó¿Φ, «º¡áτáεΘπε "¬«¡Ñµ Σá⌐½á" (Ctrl-d), »α¿ φΓ«¼ ß ΓÑନ¡á½«¼ «ßΓ὿ß∞ ßó∩-
- ºá¡¡δ¼¿ ¡Ñ¬«Γ«αδÑ ¿º ßπΘÑßΓóπεΘ¿σ »α«µÑßß«ó, »α«µÑßß, óδ»«½¡∩εΘ¿⌐ Σπ¡¬µ¿ε
- exit, »«Φ½ÑΓ ¿¼ óßѼ ß¿ú¡á½ « "ºáó¿ßá¡¿¿". èα«¼Ñ Γ«ú«, ∩ñα« ßíαáßδóáÑΓ ó
- ¡«½∞ º¡áτÑ¡¿Ñ ¬«ñá úαπ»»δ »α«µÑßß«ó ñ½∩ óßÑσ »α«µÑßß«ó, óσ«ñ∩Θ¿σ ó ñá¡¡πε
- úαπ»»π, »«ß¬«½∞¬π ¡Ñ ¿ß¬½ετÑ¡á 󫺼«ª¡«ßΓ∞ Γ«ú«, τΓ« »«ºñ¡ÑÑ ΓѬπΘ¿⌐ ¬«ñ
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »α«µÑßßá (»α«µÑßßá, ¬«Γ«αδ⌐ óδºóá½ Σπ¡¬µ¿ε exit) íπñÑΓ »α¿ßó«-
- Ñ¡ ñαπú«¼π »α«µÑßßπ ¿ Γ«úñá »«ß½Ññ¡¿⌐ ó«ºú½áó¿Γ úαπ»»π ß π¬áºá¡¡δ¼ ¬«ñ«¼.
- Åα«µÑßßδ, óσ«ñ¿óΦ¿Ñ ó ßΓáαπε úαπ»»π, ó ¡«óπε úαπ»»π óσ«ñ¿Γ∞ ¡Ñ íπñπΓ. ū߽Ñ
- φΓ«ú« ∩ñα« »α«ß¼áΓα¿óáÑΓ ñÑß¬α¿»Γ«αδ «Γ¬αδΓδσ Σá⌐½«ó, ºá¬αδóáÑΓ ¬áªñδ⌐ ¿º
- φΓ¿σ Σá⌐½«ó »« á½ú«α¿Γ¼π close ¿ «ßó«í«ªñáÑΓ »« á½ú«α¿Γ¼π iput ¿¡ñѬßδ ΓѬπ-
- ΘÑú« ¬áΓὫúá ¿ ¬«α¡∩ (Ñß½¿ «¡ ¿º¼Ñ¡∩½ß∩).
- ìᬫ¡Ñµ, ∩ñα« «ßó«í«ªñáÑΓ óßε óδñѽѡ¡πε ºáñáτÑ »á¼∩Γ∞ ó¼ÑßΓÑ ß ß««ΓóÑΓ-
- ßΓóπεΘ¿¼¿ «í½áßΓ∩¼¿ (»« á½ú«α¿Γ¼π detachreg) ¿ »ÑαÑó«ñ¿Γ »α«µÑßß ó ß«ßΓ«∩¡¿Ñ
- »αѬαáΘÑ¡¿∩ ßπΘÑßΓó«óá¡¿∩. ƒñα« ß«σαá¡∩ÑΓ ó Γáí½¿µÑ »α«µÑßß«ó ¬«ñ ó«ºóαáΓá
- Σπ¡¬µ¿¿ exit (status), á Γá¬ªÑ ßπ¼¼áα¡«Ñ óαѼ∩ ¿ß»«½¡Ñ¡¿∩ »α«µÑßßá ¿ Ñú« »«-
- Γ«¼¬«ó ó αѪ¿¼Ñ ∩ñαá ¿ αѪ¿¼Ñ ºáñáτ¿. é αáºñÑ½Ñ 7.4 »α¿ αáßß¼«ΓαÑ¡¿¿ Σπ¡¬µ¿¿
- wait íπñÑΓ »«¬áºá¡«, ¬á¬¿¼ «íαẫ¼ »α«µÑßß »«½πτáÑΓ ¿¡Σ«α¼áµ¿ε « óαѼѡ¿ óδ-
- »«½¡Ñ¡¿∩ ßó«¿σ »«Γ«¼¬«ó. ƒñα« Γá¬ªÑ ß«ºñáÑΓ ó ú½«íá½∞¡«¼ πτÑΓ¡«¼ Σá⌐½Ñ ºá-
- »¿ß∞, ¬«Γ«αá∩ ß«ñÑαª¿Γ αẽ¿τ¡πε ßΓáΓ¿ßΓ¿τÑ߬πε ¿¡Σ«α¼áµ¿ε « óδ»«½¡Ñ¡¿¿ »α«-
- µÑßßá, Γá¬πε ¬á¬ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩, ¿ß»«½∞º«óá¡¿Ñ αÑßπαß«ó µÑ¡-
- Γαá½∞¡«ú« »α«µÑßß«αá ¿ »á¼∩Γ¿, «íΩѼ »«Γ«¬«ó óó«ñá-óδó«ñá, ßó∩ºá¡¡δσ ß »α«-
-
- 199
-
- µÑßß«¼. Å«½∞º«óáΓѽ∞߬¿Ñ »α«úαá¼¼δ ¼«úπΓ ó ½εí«⌐ ¼«¼Ñ¡Γ «íαáΓ¿Γ∞ß∩ ¬ πτÑΓ¡«-
- ¼π Σá⌐½π ºá ßΓáΓ¿ßΓ¿τÑ߬¿¼¿ ñá¡¡δ¼¿, »αÑñßΓáó½∩εΘ¿¼¿ ¿¡ΓÑαÑß ß Γ«τ¬¿ ºαÑ¡¿∩
- ߽Ѫѡ¿∩ ºá Σπ¡¬µ¿«¡¿α«ó᡿Ѽ ß¿ßΓÑ¼δ ¿ «αúá¡¿ºáµ¿¿ αáßτÑΓ«ó ß »«½∞º«óáΓѽ∩-
- ¼¿. ƒñα« πñá½∩ÑΓ »α«µÑßß ¿º ñÑαÑóá »α«µÑßß«ó, á Ñú« »«Γ«¼¬«ó »ÑαÑñáÑΓ »α«-
- µÑßßπ 1 (init). Æá¬¿¼ «íαẫ¼, »α«µÑßß 1 ßΓá¡«ó¿Γß∩ ºá¬«¡¡δ¼ α«ñ¿ΓѽѼ óßÑσ
- »α«ñ«½ªáεΘ¿σ ßπΘÑßΓó«óá¡¿Ñ »«Γ«¼¬«ó ºáóÑαΦáεΘÑú«ß∩ »α«µÑßßá. àß½¿ ¬Γ«-½¿í«
- ¿º »«Γ«¼¬«ó »αѬαáΘáÑΓ ßπΘÑßΓó«óá¡¿Ñ, ºáóÑαΦáεΘ¿⌐ß∩ »α«µÑßß »«ßδ½áÑΓ »α«µÑß-
- ßπ init ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á" ñ½∩ Γ«ú«, τΓ«íδ »α«µÑßß ¡áτá½∞¡«⌐ ºáúαπº¬¿
- ¼«ú πñ὿Γ∞ ºá»¿ß∞ « »«Γ«¼¬Ñ ¿º Γáí½¿µδ »α«µÑßß«ó (ß¼. αáºñѽ 7.9); ¬α«¼Ñ
- Γ«ú«, ºáóÑαΦáεΘ¿⌐ß∩ »α«µÑßß »«ßδ½áÑΓ φΓ«Γ ß¿ú¡á½ ßó«Ñ¼π α«ñ¿Γѽε. é Γ¿»¿τ¡«⌐
- ß¿Γπᵿ¿ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß ß¿¡σα«¡¿º¿απÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß ºáóÑαΦáεΘ¿¼ß∩
- »«Γ«¼¬«¼ ß »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ wait. ÅαѬαáΘá∩ ßπΘÑßΓó«óá¡¿Ñ, »α«µÑßß
- »ÑαѬ½ετáÑΓ ¬«¡ΓѬßΓ ¿ ∩ñα« ¼«ªÑΓ ΓÑ»Ñα∞ óδí¿αáΓ∞ ñ½∩ ¿ß»«½¡Ñ¡¿∩ ß½ÑñπεΘ¿⌐
- »α«µÑßß; ∩ñα« ß φΓ¿σ »«α πªÑ ¡Ñ íπñÑΓ ¿ß»«½¡∩Γ∞ »α«µÑßß, »αѬαáΓ¿óΦ¿⌐ ßπΘÑß-
- Γó«óá¡¿Ñ.
- é »α«úαá¼¼Ñ, »α¿óÑñÑ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.15, »α«µÑßß ß«ºñáÑΓ ¡«óδ⌐ »α«µÑßß,
- ¬«Γ«αδ⌐ »ÑτáΓáÑΓ ßó«⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ óδºδóáÑΓ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε pause,
- »α¿«ßΓá¡áó½¿óá∩ß∞ ñ« »«½πτÑ¡¿∩ ß¿ú¡á½á. Åα«µÑßß-α«ñ¿Γѽ∞ »ÑτáΓáÑΓ PID ßó«Ñú«
- »«Γ«¼¬á ¿ ºáóÑαΦáÑΓß∩, ó«ºóαáΘá∩ Γ«½∞¬« τΓ« óδóÑñÑ¡¡«Ñ º¡áτÑ¡¿Ñ τÑαѺ »áαá-
- ¼ÑΓα status. àß½¿ íδ ó맮ó Σπ¡¬µ¿¿ exit «ΓßπΓßΓó«óá½, ¡áτá½∞¡á∩ »α«µÑñπαá
- ßñѽá½á íδ Ñú« »« óδσ«ñÑ »α«µÑßßá ¿º Σπ¡¬µ¿¿ main. Å«α«ªñÑ¡¡δ⌐ »α«µÑßß »α«-
- ñ«½ªáÑΓ «ª¿ñáΓ∞ »«½πτÑ¡¿∩ ß¿ú¡á½á, ñáªÑ Ñß½¿ Ñú« α«ñ¿Γѽ∞ πªÑ ºáóÑαΦ¿½ß∩.
-
-
- E7.4 ÄåêäÇìêà çÇéàÉÿàìêƒ é¢ÅÄïìàìêƒ ÅÉÄûàææÇF
-
- Åα«µÑßß ¼«ªÑΓ ß¿¡σα«¡¿º¿α«óáΓ∞ »α«ñ«½ªÑ¡¿Ñ ßó«Ñú« óδ»«½¡Ñ¡¿∩ ß ¼«¼Ñ¡Γ«¼
- ºáóÑαΦÑ¡¿∩ »«Γ«¼¬á, Ñß½¿ ó«ß»«½∞ºπÑΓß∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿Ñ⌐ wait. æ¿¡Γá¬ß¿ß
- ó맮óá Σπ¡¬µ¿¿:
-
- ┌────────────────────────────────────────────────────────────┐
- │ main() │
- │ { │
- │ int child; │
- │ │
- │ if ((child = fork()) == 0) │
- │ { │
- │ printf("PID »«Γ«¼¬á %d\n",getpid()); │
- │ pause(); /* »α¿«ßΓá¡«ó óδ»«½¡Ñ¡¿∩ ñ« »«½πτÑ¡¿∩ │
- │ ß¿ú¡á½á */ │
- │ } │
- │ /* α«ñ¿Γѽ∞ */ │
- │ printf("PID »«Γ«¼¬á %d\n",child); │
- │ exit(child); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.15. Åα¿¼Ñα ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿¿ exit
-
-
- pid = wait(stat_addr);
- úñÑ pid - º¡áτÑ¡¿Ñ ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ (PID) »αѬαáΓ¿óΦÑú« ßó«Ñ ßπΘÑßΓó«óá¡¿Ñ
- »«Γ«¼¬á, stat_addr - áñαÑß »ÑαѼѡ¡«⌐ µÑ½«ú« Γ¿»á, ó ¬«Γ«απε íπñÑΓ »«¼ÑΘÑ¡«
- ó«ºóαáΘáѼ«Ñ Σπ¡¬µ¿Ñ⌐ exit º¡áτÑ¡¿Ñ, ó »α«ßΓαá¡ßΓóÑ ºáñáτ¿.
- ǽú«α¿Γ¼ Σπ¡¬µ¿¿ wait »α¿óÑñÑ¡ ¡á É¿ßπ¡¬Ñ 7.16. ƒñα« óÑñÑΓ »«¿ß¬ »«Γ«¼-
- ¬«ó »α«µÑßßá, »αѬαáΓ¿óΦ¿σ ßπΘÑßΓó«óá¡¿Ñ, ¿ ó ß½πτáÑ ¿σ «ΓßπΓßΓó¿∩ ó«ºóαáΘá-
- ÑΓ «Φ¿í¬π. àß½¿ »«Γ«¼«¬, »αѬαáΓ¿óΦ¿⌐ ßπΘÑßΓó«óá¡¿Ñ, «í¡áαπªÑ¡, ∩ñα« »ÑαÑñá-
- ÑΓ Ñú« ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ¿ º¡áτÑ¡¿Ñ, ó«ºóαáΘáѼ«Ñ τÑαѺ »áαá¼ÑΓα Σπ¡¬µ¿¿
- exit, »α«µÑßßπ, óδºóáóΦѼπ Σπ¡¬µ¿ε wait. Æá¬¿¼ «íαẫ¼, τÑαѺ »áαá¼ÑΓα Σπ¡¬-
-
- 200
-
- µ¿¿ exit (status) ºáóÑαΦáεΘ¿⌐ß∩ »α«µÑßß ¼«ªÑΓ »ÑαÑñáóáΓ∞ αẽ¿τ¡δÑ º¡áτÑ¡¿∩,
- ó ºá¬«ñ¿α«óá¡¡«¼ ó¿ñÑ ß«ñÑαªáΘ¿Ñ ¿¡Σ«α¼áµ¿ε « »α¿τ¿¡Ñ ºáóÑαΦÑ¡¿∩ »α«µÑßßá,
- «ñ¡á¬« ¡á »αá¬Γ¿¬Ñ φëà »áαá¼ÑΓα ¿ß»«½∞ºπÑΓß∩ »« ¡áº¡áτÑ¡¿ε ñ«ó«½∞¡« αÑñ¬«.
- ƒñα« »ÑαÑñáÑΓ ó ß««ΓóÑΓßΓóπεΘ¿Ñ »«½∩, »α¿¡áñ½ÑªáΘ¿Ñ »α«ßΓαá¡ßΓóπ α«ñ¿Γѽ∞-
- ߬«ú« »α«µÑßßá, ¡á¬«»½Ñ¡¡δÑ º¡áτÑ¡¿∩ »α«ñ«½ª¿Γѽ∞¡«ßΓ¿ ¿ß»«½¡Ñ¡¿∩ »α«µÑß-
- ßá-»«Γ«¼¬á ó αѪ¿¼Ñ ∩ñαá ¿ ó αѪ¿¼Ñ ºáñáτ¿ ¿, ¡á¬«¡Ñµ, «ßó«í«ªñáÑΓ ó Γáí½¿µÑ
- »α«µÑßß«ó ¼ÑßΓ«, ¬«Γ«α«Ñ ó ¡Ñ⌐ ºá¡¿¼á½ »αѪñÑ »αѬαáΓ¿óΦ¿⌐ ßπΘÑßΓó«óá¡¿Ñ
- »α«µÑßß. ¥Γ« ¼ÑßΓ« íπñÑΓ »αÑñ«ßΓáó½Ñ¡« ¡«ó«¼π »α«µÑßßπ.
- àß½¿ »α«µÑßß, óδ»«½¡∩εΘ¿⌐ Σπ¡¬µ¿ε wait, ¿¼ÑÑΓ »«Γ«¼¬«ó, »α«ñ«½ªáεΘ¿σ ßπ-
- ΘÑßΓó«óá¡¿Ñ, «¡ »α¿«ßΓá¡áó½¿óáÑΓß∩ ñ« »«½πτÑ¡¿∩ «ª¿ñáѼ«ú« ß¿ú¡á½á. ƒñα« ¡Ñ
- ó«º«í¡«ó½∩ÑΓ »« ßó«Ñ⌐ ¿¡¿µ¿áΓ¿óÑ »α«µÑßß, »α¿«ßΓá¡«ó¿óΦ¿⌐ß∩ ß »«¼«Θ∞ε Σπ¡¬-
- µ¿¿ wait: Γᬫ⌐ »α«µÑßß ¼«ªÑΓ ó«º«í¡«ó¿Γ∞ß∩ Γ«½∞¬« ó ß½πτáÑ »«½πτÑ¡¿∩ ß¿ú¡á-
- ½á. ìá óßÑ ß¿ú¡á½δ, ¬α«¼Ñ ß¿ú¡á½á "ú¿íѽ∞ »«Γ«¼¬á", »α«µÑßß αÑáú¿απÑΓ αá¡ÑÑ
- αáßß¼«ΓαÑ¡¡δ¼ «íαẫ¼. ÉÑᬵ¿∩ »α«µÑßßá ¡á ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á" »α«∩ó½∩-
- ÑΓß∩ »«-αạ«¼π ó ºáó¿ß¿¼«ßΓ¿ «Γ «íßΓ«∩Γѽ∞ßΓó:
- * Å« π¼«½τá¡¿ε (Γ« ÑßΓ∞ Ñß½¿ ߻ѵ¿á½∞¡« ¡Ñ «ú«ó«αÑ¡δ ¡¿¬á¬¿Ñ ñαπú¿Ñ ñÑ⌐ßΓ-
- ó¿∩) »α«µÑßß óδσ«ñ¿Γ ¿º ß«ßΓ«∩¡¿∩ «ßΓá¡«óá, ó ¬«Γ«α«Ñ «¡ ó«Φѽ ß »«¼«Θ∞ε
- Σπ¡¬µ¿¿ wait, ¿ ºá»π߬áÑΓ á½ú«α¿Γ¼ issig ñ½∩ «»«º¡á¡¿∩ Γ¿»á »«ßΓπ»¿óΦÑú«
- ß¿ú¡á½á. ǽú«α¿Γ¼ issig (É¿ßπ¡«¬ 7.7) αáßß¼áΓα¿óáÑΓ «ß«íδ⌐ ß½πτá⌐ »«ß-
- Γπ»½Ñ¡¿∩ ß¿ú¡á½á Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á" ¿ ó«ºóαáΘáÑΓ "½«ª∞". Å«φΓ«¼π ∩ñα«
- ¡Ñ óδ»«½¡∩ÑΓ longjump ¿º Σπ¡¬µ¿¿ sleep, á ó«ºóαáΘáÑΓ π»αáó½Ñ¡¿Ñ Σπ¡¬µ¿¿
- wait. Ä¡« »ÑαѺá»π߬áÑΓ Σπ¡¬µ¿ε wait, ¡áσ«ñ¿Γ »«Γ«¼¬«ó, »αѬαáΓ¿óΦ¿σ ßπ-
- ΘÑßΓó«óá¡¿Ñ (»« ¬αá⌐¡Ñ⌐ ¼ÑαÑ, «ñ¡«ú«), «ßó«í«ªñáÑΓ ¼ÑßΓ« ó Γáí½¿µÑ »α«-
- µÑßß«ó, ºá¡¿¼áѼ«Ñ φΓ¿¼¿ »«Γ«¼¬á¼¿, ¿ óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿ wait, ó«ºóαáΘá∩
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ wait │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: áñαÑß »ÑαѼѡ¡«⌐ ñ½∩ σαá¡Ñ¡¿∩ º¡áτÑ¡¿∩│
- │ status, ó«ºóαáΘáѼ«ú« ºáóÑαΦáεΘ¿¼ß∩ │
- │ »α«µÑßß«¼ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¿ñÑ¡Γ¿Σ¿¬áΓ«α »«Γ«¼¬á ¿ ¬«ñ ó«ºóαáΓá │
- │ Σπ¡¬µ¿¿ exit │
- │ { │
- │ Ñß½¿ (»α«µÑßß, óδºóáóΦ¿⌐ Σπ¡¬µ¿ε wait, ¡Ñ ¿¼ÑÑΓ »«Γ«¼- │
- │ ¬«ó) │
- │ ó«ºóαáΓ¿Γ∞ («Φ¿í¬π); │
- │ │
- │ ñ½∩ (;;) /* µ¿¬½ ß ó¡πΓαÑ¡¡¿¼ µ¿¬½«¼ */ │
- │ { │
- │ Ñß½¿ (»α«µÑßß, óδºóáóΦ¿⌐ Σπ¡¬µ¿ε wait, ¿¼ÑÑΓ »«Γ«¼-│
- │ ¬«ó, »αѬαáΓ¿óΦ¿σ ßπΘÑßΓó«óá¡¿Ñ) │
- │ { │
- │ óδíαáΓ∞ »α«¿ºó«½∞¡«ú« »«Γ«¼¬á; │
- │ »ÑαÑñáΓ∞ Ñú« α«ñ¿ΓÑ½ε ¿¡Σ«α¼áµ¿ε «í ¿ß»«½∞º«óá-│
- │ ¡¿¿ »«Γ«¼¬«¼ αÑßπαß«ó µÑ¡Γαá½∞¡«ú« »α«µÑßß«αá;│
- │ «ßó«í«ñ¿Γ∞ ó Γáí½¿µÑ »α«µÑßß«ó ¼ÑßΓ«, ºá¡¿¼áÑ- │
- │ ¼«Ñ »«Γ«¼¬«¼; │
- │ ó«ºóαáΓ¿Γ∞ (¿ñÑ¡Γ¿Σ¿¬áΓ«α »«Γ«¼¬á, ¬«ñ ó«ºóαáΓá│
- │ Σπ¡¬µ¿¿ exit, óδºóá¡¡«⌐ »«Γ«¼¬«¼); │
- │ } │
- │ Ñß½¿ (π »α«µÑßßá ¡ÑΓ »«Γ«¼¬«ó) │
- │ ó«ºóαáΓ¿Γ∞ «Φ¿í¬π; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ ß »α¿«α¿ΓÑΓ«¼, ñ«»π߬áεΘ¿¼ »αÑαδóá-│
- │ ¡¿∩ (ñ« ºáóÑαΦÑ¡¿∩ »«Γ«¼¬á); │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.16. ǽú«α¿Γ¼ Σπ¡¬µ¿¿ wait
-
- 201
-
-
-
- π»αáó½Ñ¡¿Ñ »α«µÑßßπ, óδºóáóΦѼπ ÑÑ.
- * àß½¿ »α«µÑßßδ »α¿¡¿¼áÑΓ ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á, ∩ñα« ñѽáÑΓ óßÑ ¡Ñ«íσ«ñ¿-
- ¼δÑ πßΓá¡«ó¬¿ ñ½∩ ºá»πß¬á »«½∞º«óáΓѽ∞߬«⌐ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á,
- ¬á¬ ¿ ó ß½πτáÑ »«ßΓπ»½Ñ¡¿∩ ß¿ú¡á½á ½εí«ú« ñαπú«ú« Γ¿»á.
- * àß½¿ »α«µÑßß ¿ú¡«α¿απÑΓ ß¿ú¡á½δ ñá¡¡«ú« Γ¿»á, ∩ñα« »ÑαѺá»π߬áÑΓ Σπ¡¬µ¿ε
- 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, «¡ »«ßδ½áÑΓ ßó«Ñ¼π α«ñ¿Γѽε ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á"; α«ñ¿Γѽ∞߬¿⌐
- »α«µÑßß ó«º«í¡«ó½∩ÑΓß∩, »«ß¬«½∞¬π «¡ íδ½ »α¿«ßΓá¡«ó½Ñ¡ ß »α¿«α¿ΓÑΓ«¼, ñ«»πß-
- ¬áεΘ¿¼ »αÑαδóá¡¿∩. è«úñá Γᬠ¿½¿ ¿¡áτÑ α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß »α«ñ«½ª¿Γ ßó«Ñ
-
- ┌────────────────────────────────────────────────────────────┐
- │ #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 ¿ ¿ú¡«α¿α«óá-
- ¡¿∩ ß¿ú¡á½á "ú¿íѽ∞ »«Γ«¼¬á"
-
- 202
-
-
- óδ»«½¡Ñ¡¿Ñ, «¡ «í¡áαπª¿Γ, τΓ« ß¿ú¡á½ ß««íΘá½ « "ú¿íѽ¿" »«Γ«¼¬á; «ñ¡á¬«,
- »«ß¬«½∞¬π «¡ ¿ú¡«α¿απÑΓ ß¿ú¡á½δ
- φΓ«ú« Γ¿»á ¿ ¡Ñ «íαáíáΓδóáÑΓ ¿σ, ∩ñα« πñá½∩ÑΓ ¿º Γáí½¿µδ »α«µÑßß«ó ºá»¿ß∞,
- ß««ΓóÑΓßΓóπεΘπε »αѬαáΓ¿óΦѼπ ßπΘÑßΓó«óá¡¿Ñ »«Γ«¼¬π, ¿ »α«ñ«½ªáÑΓ óδ»«½¡Ñ¡¿Ñ
- Σπ¡¬µ¿¿ wait Γá¬, ß½«ó¡« ß¿ú¡á½á ¿ ¡Ñ í佫. ƒñα« óδ»«½¡∩ÑΓ φΓ¿ ñÑ⌐ßΓó¿∩ óß∩-
- ¬¿⌐ αáº, ¬«úñá α«ñ¿Γѽ∞߬¿⌐ »α«µÑßß »«½πτáÑΓ ß¿ú¡á½ Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á",
- ñ« ΓÑσ »«α, »«¬á µ¿¬½ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ wait ¡Ñ íπñÑΓ ºáóÑαΦÑ¡ ¿ »«¬á ¡Ñ
- íπñÑΓ πßΓá¡«ó½Ñ¡«, τΓ« π »α«µÑßßá í«½∞ΦÑ »«Γ«¼¬«ó ¡ÑΓ. Æ«úñá Σπ¡¬µ¿∩ wait
- ó«ºóαáΘáÑΓ º¡áτÑ¡¿Ñ, αáó¡«Ñ -1. Éạ¿µá ¼Ñªñπ ñóπ¼∩ ß»«ß«íἿ ºá»πß¬á »α«ú-
- αá¼¼δ ß«ßΓ«¿Γ ó Γ«¼, τΓ« ó »Ñαó«¼ ß½πτáÑ »α«µÑßß-α«ñ¿Γѽ∞ ªñÑΓ ºáóÑαΦÑ¡¿∩
- ½εí«ú« ¿º »«Γ«¼¬«ó, ó Γ« óαѼ∩ ¬á¬ ó« óΓ«α«¼ ß½πτáÑ «¡ ªñÑΓ, »«¬á ºáóÑαΦáΓß∩
- óßÑ Ñú« »«Γ«¼¬¿.
- é αá¡¡¿σ óÑαß¿∩σ ß¿ßΓѼδ UNIX Σπ¡¬µ¿¿ exit ¿ wait ¡Ñ ¿ß»«½∞º«ó὿ ¿ ¡Ñ
- αáßß¼áΓα¿ó὿ ß¿ú¡á½ Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á". é¼ÑßΓ« »«ß佬¿ ß¿ú¡á½á Σπ¡¬µ¿∩
- exit ó«º«í¡«ó½∩½á óδ»«½¡Ñ¡¿Ñ α«ñ¿Γѽ∞߬«ú« »α«µÑßßá. àß½¿ α«ñ¿Γѽ∞߬¿⌐ »α«-
- µÑßß »α¿ óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ wait »α¿«ßΓá¡«ó¿½ß∩, «¡ ó«º«í¡«ó½∩ÑΓß∩, ¡áσ«ñ¿Γ
- »«Γ«¼¬á, »αѬαáΓ¿óΦÑú« ßπΘÑßΓó«óá¡¿Ñ, ¿ ó«ºóαáΘáÑΓ π»αáó½Ñ¡¿Ñ. é »α«Γ¿ó¡«¼
- ß½πτáÑ ó«º«í¡«ó½Ñ¡¿∩ ¡Ñ »α«¿ßσ«ñ¿Γ; »α«µÑßß-α«ñ¿Γѽ∞ «í¡áαπª¿Γ "»«ú¿íΦÑú«"
- »«Γ«¼¬á »α¿ ß½ÑñπεΘѼ «íαáΘÑ¡¿¿ ¬ Σπ¡¬µ¿¿ wait. Æ«τ¡« ΓᬠªÑ ¿ »α«µÑßß ¡á-
- τá½∞¡«⌐ ºáúαπº¬¿ (init) ¼«ªÑΓ »α¿«ßΓá¡«ó¿Γ∞ß∩, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε wait, ¿ ºá-
- óÑαΦáεΘ¿Ñß∩ »« exit »α«µÑßßδ íπñπΓ ó«º«í¡«ó½∩Γ∞ Ñú«, Ñß½¿ «¡ ¿¼ÑÑΓ πßδ¡«ó-
- ½Ñ¡¡δσ »«Γ«¼¬«ó, »αѬαáΘáεΘ¿σ ßπΘÑßΓó«óá¡¿Ñ.
- é Γᬫ⌐ αÑ὿ºáµ¿¿ Σπ¡¬µ¿⌐ exit ¿ wait ¿¼ÑÑΓß∩ «ñ¡á ¡ÑαÑΦÑ¡¡á∩ »α«í½Ñ¼á,
- ßó∩ºá¡¡á∩ ß ΓѼ, τΓ« »α«µÑßßδ, »αѬαáΓ¿óΦ¿Ñ ßπΘÑßΓó«óá¡¿Ñ, ¡Ñ½∞º∩ πí¿αáΓ∞ ¿º
- ß¿ßΓѼδ ñ« ΓÑσ »«α, »«¬á ¿σ α«ñ¿Γѽ∞ ¡Ñ ¿ß»«½¡¿Γ Σπ¡¬µ¿ε wait. àß½¿ »α«µÑßß
- ß«ºñá½ ¼¡«ªÑßΓó« »«Γ«¼¬«ó, ¡« Γᬠ¿ ¡Ñ ¿ß»«½¡¿½ Σπ¡¬µ¿ε wait, ¼«ªÑΓ »α«¿º«⌐-
- Γ¿ »ÑαÑ»«½¡Ñ¡¿Ñ Γáí½¿µδ »α«µÑßß«ó ¿º-ºá ¡á½¿τ¿∩ »«Γ«¼¬«ó, »αѬαáΓ¿óΦ¿σ ßπ-
- ΘÑßΓó«óá¡¿Ñ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exit. é ¬áτÑßΓóÑ »α¿¼Ñαá αáßß¼«Γα¿¼ ΓѬßΓ
- »α«úαá¼¼δ »½á¡¿α«óΘ¿¬á »α«µÑßß«ó, »α¿óÑñÑ¡¡δ⌐ ¡á É¿ßπ¡¬Ñ 7.18. Åα«µÑßß »α«-
- ¿ºó«ñ¿Γ ßτ¿Γδóá¡¿Ñ ñá¡¡δσ ¿º Σá⌐½á ßΓá¡ñáαΓ¡«ú« óó«ñá ñ« ΓÑσ »«α, »«¬á ¡Ñ
- íπñÑΓ «í¡áαπªÑ¡ ¬«¡Ñµ Σá⌐½á, ß«ºñáóá∩ »α¿ ¬áªñ«¼ ¿ß»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ read ¡«-
- ó«ú« »«Γ«¼¬á. Äñ¡á¬«, »α«µÑßß-α«ñ¿Γѽ∞ ¡Ñ ñ«ª¿ñáÑΓß∩ ºáóÑαΦÑ¡¿∩ ¬áªñ«ú« »«-
- Γ«¼¬á, »«ß¬«½∞¬π «¡ ßΓαѼ¿Γß∩ ºá»π߬áΓ∞ »α«µÑßßδ ¡á óδ»«½¡Ñ¡¿Ñ ¬á¬ ¼«ª¡«
- íδßΓαÑÑ, ΓѼ í«½ÑÑ, τΓ« ¼«ªÑΓ »α«⌐Γ¿ ñ«ó«½∞¡« ¼¡«ú« óαѼѡ¿, »αѪñÑ τѼ »α«-
- µÑßß-»«Γ«¼«¬ ºáóÑαΦ¿Γ ßó«Ñ óδ»«½¡Ñ¡¿Ñ. àß½¿, «íαáΓ¿óΦ¿ß∞ ¬
-
- ┌────────────────────────────────────────────────────────────┐
- │ #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. Åα¿¼Ñα π¬áºá¡¿∩ »α¿τ¿¡δ »«∩ó½Ñ¡¿∩ ß¿ú¡á½á "ú¿-
- íѽ∞ »«Γ«¼¬«ó"
-
-
- 203
-
- Σπ¡¬µ¿¿ signal, »α«µÑßß αáß»«α∩ñ¿½ß∩ ¿ú¡«α¿α«óáΓ∞ ß¿ú¡á½δ Γ¿»á "ú¿íѽ∞ »«-
- Γ«¼¬á", ∩ñα« íπñÑΓ «τ¿ΘáΓ∞ ºá»¿ß¿, ß««ΓóÑΓßΓóπεΘ¿Ñ »αѬαáΓ¿óΦ¿¼ ßπΘÑßΓó«óá-
- ¡¿Ñ »α«µÑßßá¼, áóΓ«¼áΓ¿τÑ߬¿. ê¡áτÑ ó ¬«¡Ñτ¡«¼ ¿Γ«úÑ ¿º-ºá Γᬿσ »α«µÑßß«ó
- ¼«ªÑΓ »α«¿º«⌐Γ¿ »ÑαÑ»«½¡Ñ¡¿Ñ Γáí½¿µδ.
-
-
- E7.5 é¢çÄé äÉôâêò ÅÉÄâÉÇîîF
-
- æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ exec ñáÑΓ ó«º¼«ª¡«ßΓ∞ »α«µÑßßπ ºá»π߬áΓ∞ ñαπúπε »α«ú-
- αá¼¼π, »α¿ φΓ«¼ ß««ΓóÑΓßΓóπεΘ¿⌐ φΓ«⌐ »α«úαá¼¼Ñ ¿ß»«½¡∩Ѽδ⌐ Σá⌐½ íπñÑΓ αáß»«-
- ½áúáΓ∞ß∩ ó »α«ßΓαá¡ßΓóÑ »á¼∩Γ¿ »α«µÑßßá. æ«ñÑন¼«Ñ »«½∞º«óáΓѽ∞߬«ú« ¬«¡-
- ΓѬßΓá »«ß½Ñ ó맮óá Σπ¡¬µ¿¿ ßΓá¡«ó¿Γß∩ ¡Ññ«ßΓπ»¡δ¼, ºá ¿ß¬½ετÑ¡¿Ñ¼ »ÑαÑñáóá-
- Ѽδσ Σπ¡¬µ¿¿ »áαá¼ÑΓα«ó, ¬«Γ«αδÑ »ÑαÑ»¿ßδóáεΓß∩ ∩ñα«¼ ¿º ßΓáα«ú« áñαÑß¡«ú«
- »α«ßΓαá¡ßΓóá ó ¡«ó«Ñ. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
-
- execve(filename,argv,envp)
-
- úñÑ filename - ¿¼∩ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á, argv - π¬áºáΓѽ∞ ¡á ¼áßß¿ó »áαá¼ÑΓ-
- α«ó, ¬«Γ«αδÑ »ÑαÑñáεΓß∩ óδºδóáѼ«⌐ »α«úαá¼¼Ñ, á envp - π¬áºáΓѽ∞ ¡á ¼áßß¿ó
- »áαá¼ÑΓα«ó, ß«ßΓáó½∩εΘ¿σ ßαÑñπ óδ»«½¡Ñ¡¿∩ óδºδóáѼ«⌐ »α«úαá¼¼δ. é맮ó ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿ exec «ßπΘÑßΓó½∩εΓ ¡Ñ߬«½∞¬« í¿í½¿«ΓÑτ¡δσ Σπ¡¬µ¿⌐, Γᬿσ ¬á¬
- execl, execv, execle ¿ Γ.ñ. é Γ«¼ ß½πτáÑ, ¬«úñá »α«úαá¼¼á ¿ß»«½∞ºπÑΓ »áαá-
- ¼ÑΓαδ ¬«¼á¡ñ¡«⌐ ßΓ᫬¿
-
- main(argc,argv) ,
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ exec │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: (1) ¿¼∩ Σá⌐½á │
- │ (2) ß»¿ß«¬ »áαá¼ÑΓα«ó │
- │ (3) ß»¿ß«¬ »ÑαѼѡ¡δσ ßαÑñδ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ »«½πτ¿Γ∞ ¿¡ñÑ¬ß Σá⌐½á (á½ú«α¿Γ¼ namei); │
- │ »α«óÑα¿Γ∞, ∩ó½∩ÑΓß∩ ½¿ Σá⌐½ ¿ß»«½¡¿¼δ¼ ¿ ¿¼ÑÑΓ ½¿ »«½∞- │
- │ º«óáΓѽ∞ »αáó« ¡á Ñú« ¿ß»«½¡Ñ¡¿Ñ; │
- │ »α«τ¿ΓáΓ∞ ¿¡Σ«α¼áµ¿ε ¿º ºáú«½«ó¬«ó Σá⌐½á ¿ »α«óÑα¿Γ∞, │
- │ ∩ó½∩ÑΓß∩ ½¿ «¡ ºáúαπº«τ¡δ¼ ¼«ñπ½Ñ¼; │
- │ ߬«»¿α«óáΓ∞ »áαá¼ÑΓαδ, »ÑαÑñá¡¡δÑ Σπ¡¬µ¿¿, ¿º ßΓáα«ú« │
- │ áñαÑß¡«ú« »α«ßΓαá¡ßΓóá ó ß¿ßΓѼ¡«Ñ »α«ßΓαá¡ßΓó«; │
- │ ñ½∩ (¬áªñ«⌐ «í½áßΓ¿, »α¿ß«Ññ¿¡Ñ¡¡«⌐ ¬ »α«µÑßßπ) │
- │ «Γß«Ññ¿¡¿Γ∞ óßÑ ßΓáαδÑ «í½áßΓ¿ (á½ú«α¿Γ¼ detachreg);│
- │ ñ½∩ (¬áªñ«⌐ «í½áßΓ¿, «»αÑñѽѡ¡«⌐ ó ºáúαπº«τ¡«¼ ¼«ñπ½Ñ) │
- │ { │
- │ óδñѽ¿Γ∞ ¡«óδÑ «í½áßΓ¿ (á½ú«α¿Γ¼ allocreg); │
- │ »α¿ß«Ññ¿¡¿Γ∞ «í½áßΓ¿ (á½ú«α¿Γ¼ attachreg); │
- │ ºáúαπº¿Γ∞ «í½áßΓ∞ ó »á¼∩Γ∞ »« ú«Γ«ó¡«ßΓ¿ (á½ú«α¿Γ¼ │
- │ loadreg); │
- │ } │
- │ ߬«»¿α«óáΓ∞ »áαá¼ÑΓαδ, »ÑαÑñá¡¡δÑ Σπ¡¬µ¿¿, ó ¡«óπε «í- │
- │ ½áßΓ∞ ßΓÑ¬á ºáñáτ¿; │
- │ ߻ѵ¿á½∞¡á∩ «íαáí«Γ¬á ñ½∩ setuid-»α«úαá¼¼, Γαáßß¿α«ó¬á; │
- │ »α«¿¡¿µ¿á½¿º¿α«óáΓ∞ «í½áßΓ∞ ß«σαá¡Ñ¡¿∩ αÑú¿ßΓα«ó ºáñáτ¿ │
- │ (ó αἬáσ »«ñú«Γ«ó¬¿ ¬ ó«ºóαáΘÑ¡¿ε ó αѪ¿¼ ºáñáτ¿); │
- │ «ßó«í«ñ¿Γ∞ ¿¡ñÑ¬ß Σá⌐½á (á½ú«α¿Γ¼ iput); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.19. ǽú«α¿Γ¼ Σπ¡¬µ¿¿ exec
-
- 204
-
- ¼áßß¿ó argv ∩ó½∩ÑΓß∩ ¬«»¿Ñ⌐ «ñ¡«¿¼Ñ¡¡«ú« »áαá¼ÑΓαá, »ÑαÑñáóáѼ«ú« Σπ¡¬µ¿¿
- exec. 濼ó«½∞¡δÑ ßΓ᫬¿, «»¿ßδóáεΘ¿Ñ ßαÑñπ óδ»«½¡Ñ¡¿∩ óδºδóáѼ«⌐ »α«úαá¼¼δ,
- ¿¼ÑεΓ ó¿ñ "¿¼∩=º¡áτÑ¡¿Ñ" ¿ ß«ñÑαªáΓ »«½Ñº¡πε ñ½∩ »α«úαá¼¼ ¿¡Σ«α¼áµ¿ε, Γá¬πε
- ¬á¬ ¡áτá½∞¡δ⌐ ¬áΓὫú »«½∞º«óáΓѽ∩ ¿ »πΓ∞ »«¿ß¬á ¿ß»«½¡∩Ѽδσ »α«úαá¼¼. Åα«-
- µÑßßδ ¼«úπΓ «íαáΘáΓ∞ß∩ ¬ »áαá¼ÑΓαá¼ «»¿ßá¡¿∩ ßαÑñδ óδ»«½¡Ñ¡¿∩, ¿ß»«½∞ºπ∩
- ú½«íá½∞¡πε »ÑαÑ-
- ¼Ñ¡¡πε environ, ¬«Γ«απε ºáó«ñ¿Γ ¡áτá½∞¡á∩ »α«µÑñπαá æ¿-¿¡ΓÑα»αÑΓáΓ«αá.
- ìá É¿ßπ¡¬Ñ 7.19 »αÑñßΓáó½Ñ¡ á½ú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ exec.
- æ¡áτá½á Σπ¡¬µ¿∩ «íαáΘáÑΓß∩ ¬ Σá⌐½π »« á½ú«α¿Γ¼π namei, »α«óÑα∩∩, ∩ó½∩ÑΓß∩ ½¿
- Σá⌐½ ¿ß»«½¡¿¼δ¼ ¿ «Γ½¿τ¡δ¼ «Γ ¬áΓὫúá, á Γá¬ªÑ »α«óÑα∩∩ ¡á½¿τ¿Ñ π »«½∞º«óá-
- Γѽ∩ »αáóá ¿ß»«½¡∩Γ∞ »α«úαá¼¼π. çáΓѼ ∩ñα«, ßτ¿Γδóá∩ ºáú«½«ó«¬ Σá⌐½á, «»αÑ-
- ñѽ∩ÑΓ αẼÑΘÑ¡¿Ñ ¿¡Σ«α¼áµ¿¿ ó Σá⌐½Ñ (Σ«α¼áΓ Σá⌐½á).
- ìá É¿ßπ¡¬Ñ 7.20 ¿º«íαáªÑ¡ ½«ú¿τÑ߬¿⌐ Σ«α¼áΓ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á ó Σá⌐½«-
- ó«⌐ ß¿ßΓѼÑ, «íδτ¡« úÑ¡Ñα¿απѼδ⌐ Γαá¡ß½∩Γ«α«¼ ¿½¿ ºáúαπºτ¿¬«¼. Ä¡ αáºí¿óáÑΓ-
- ß∩ ¡á τÑΓδαÑ τáßΓ¿:
- 1. â½áó¡δ⌐ ºáú«½«ó«¬, ß«ñÑαªáΘ¿⌐ ¿¡Σ«α¼áµ¿ε « Γ«¼, ¡á ߬«½∞¬« αáºñѽ«ó ñÑ-
- ½¿Γß∩ Σá⌐½, á Γá¬ªÑ ß«ñÑαªáΘ¿⌐ ¡áτá½∞¡δ⌐ áñαÑß ¿ß»«½¡Ñ¡¿∩ »α«µÑßßá ¿ ¡Ñ-
- ¬«Γ«α«Ñ "¼áú¿τÑ߬«Ñ τ¿ß½«", «»¿ßδóáεΘÑÑ Γ¿» ¿ß»«½¡∩Ѽ«ú« Σá⌐½á.
- 2. çáú«½«ó¬¿ αáºñѽ«ó, ß«ñÑαªáΘ¿Ñ ¿¡Σ«α¼áµ¿ε, «»¿ßδóáεΘπε ¬áªñδ⌐ αáºñѽ ó
- Σá⌐½Ñ: Ñú« αẼÑα, ó¿αΓπá½∞¡δÑ áñαÑßá, ó ¬«Γ«αδσ «¡ αáß»«½áúáÑΓß∩, ¿ ñα.
- 3. Éáºñѽδ, ß«ñÑαªáΘ¿Ñ ß«íßΓóÑ¡¡« "ñá¡¡δÑ" Σá⌐½á (¡á»α¿¼Ñα, ΓѬßΓ«óδÑ), ¬«-
- Γ«αδÑ ºáúαπªáεΓß∩ ó áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« »α«µÑßßá.
- 4. Éáºñѽδ, ß«ñÑαªáΘ¿Ñ ß¼ÑΦá¡¡πε ¿¡Σ«α¼áµ¿ε, Γá¬πε ¬á¬ Γáí½¿µδ ¿ñÑ¡Γ¿Σ¿¬á-
- Γ«α«ó ¿ ñαπú¿Ñ ñá¡¡δÑ, ¿ß»«½∞ºπѼδÑ ó »α«µÑßßÑ «Γ½áñ¬¿.
-
- ┌───────────────────────────┐
- │ Æ¿» Σá⌐½á │
- â½áó¡δ⌐ ºáú«½«ó«¬ │ 諽¿τÑßΓó« αáºñѽ«ó │
- │ ìáτá½∞¡«Ñ ß«ßΓ«∩¡¿Ñ αÑú¿ß-│
- │ Γα«ó │
- ├───────────────────────────┤
- │ Æ¿» αáºñѽá │
- çáú«½«ó«¬ 1-ú« αáºñѽá │ ÉẼÑα αáºñѽá │
- │ é¿αΓπá½∞¡δ⌐ áñαÑß │
- ├───────────────────────────┤
- │ Æ¿» αáºñѽá │
- çáú«½«ó«¬ 2-ú« αáºñѽá │ ÉẼÑα αáºñѽá │
- ∙ │ é¿αΓπá½∞¡δ⌐ áñαÑß │
- ∙ ├───────────────────────────┤
- ∙ │ ∙ │
- ∙ │ ∙ │
- ∙ ├───────────────────────────┤
- ∙ │ Æ¿» αáºñѽá │
- çáú«½«ó«¬ n-ú« αáºñѽá │ ÉẼÑα αáºñѽá │
- │ é¿αΓπá½∞¡δ⌐ áñαÑß │
- ├───────────────────────────┤
- Éáºñѽ 1 │ äá¡¡δÑ (¡á»α¿¼Ñα, ΓѬßΓ) │
- ├───────────────────────────┤
- Éáºñѽ 2 │ äá¡¡δÑ │
- ∙ ├───────────────────────────┤
- ∙ │ ∙ │
- ∙ │ ∙ │
- ∙ ├───────────────────────────┤
- Éáºñѽ n │ äá¡¡δÑ │
- ├───────────────────────────┤
- │ äαπúá∩ ¿¡Σ«α¼áµ¿∩ │
- └───────────────────────────┘
-
- É¿ßπ¡«¬ 7.20. ÄíαẠ¿ß»«½¡∩Ѽ«ú« Σá⌐½á
-
- 205
-
-
-
- ô¬áºá¡¡δÑ ß«ßΓáó½∩εΘ¿Ñ ß αáºó¿Γ¿Ñ¼ ßἫ⌐ ß¿ßΓѼδ ó¿ñ«¿º¼Ñ¡∩εΓß∩, «ñ¡á¬«
- ó« óßÑσ ¿ß»«½¡∩Ѽδσ Σá⌐½áσ «í∩ºáΓѽ∞¡« »α¿ßπΓßΓóπÑΓ ú½áó¡δ⌐ ºáú«½«ó«¬ ß »«-
- ½Ñ¼ Γ¿»á Σá⌐½á.
- Æ¿» Σá⌐½á «í«º¡áτáÑΓß∩ ¬«α«Γ¬¿¼ µÑ½δ¼ τ¿ß½«¼ (»αÑñßΓáó½∩ÑΓß∩ ó ¼áΦ¿¡Ñ
- »«½πß½«ó«¼), ¬«Γ«α«Ñ ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ Σá⌐½ ¬á¬ ºáúαπº«τ¡δ⌐ ¼«ñπ½∞, ñáóá∩ ΓѼ
- ßá¼δ¼ ∩ñαπ 󫺼«ª¡«ßΓ∞ «Γ߽Ѫ¿óáΓ∞ ñ¿¡á¼¿τÑ߬¿Ñ σáαá¬ΓÑα¿ßΓ¿¬¿ Ñú« óδ»«½¡Ñ-
- ¡¿∩. ìá»α¿¼Ñα, ó ¼áΦ¿¡Ñ PDP 11/70 «»αÑñѽѡ¿Ñ Γ¿»á Σá⌐½á ¬á¬ ºáúαπº«τ¡«ú«
- ¼«ñπ½∩ ßó¿ñÑΓѽ∞ßΓóπÑΓ « Γ«¼, τΓ« »α«µÑßß, ¿ß»«½¡∩εΘ¿⌐ Σá⌐½, ¼«ªÑΓ ¿ß»«½∞º«-
- óáΓ∞ ñ« 128 èíá⌐Γ »á¼∩Γ¿ ó¼ÑßΓ« 64 èíá⌐Γ (**), ΓѼ ¡Ñ ¼Ñ¡ÑÑ ó ß¿ßΓѼáσ ß ºá-
- ¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ Γ¿» Σá⌐½á óßÑ ÑΘÑ ¿úαáÑΓ ßπΘÑßΓóÑ¡¡πε α«½∞, ó τѼ ¡á¼ »αÑñ-
- ßΓ«¿Γ πíÑñ¿Γ∞ß∩ ó« óαѼ∩ º¡á¬«¼ßΓóá ß ú½áó«⌐ 9.
- éÑα¡Ñ¼ß∩ ¬ á½ú«α¿Γ¼π. îδ «ßΓᡫ󿽿ß∞ ¡á Γ«¼, τΓ« ∩ñα« «íαáΓ¿½«ß∞ ¬ ¿¡-
- ñѬßπ Σá⌐½á ¿ πßΓᡫ󿽫, τΓ« Σá⌐½ ∩ó½∩ÑΓß∩ ¿ß»«½¡¿¼δ¼. ƒñαπ ß½Ññ«óὫ íδ
- «ßó«í«ñ¿Γ∞ »á¼∩Γ∞, ºá¡¿¼áѼπε »«½∞º«óáΓѽ∞߬¿¼ ¬«¡ΓѬßΓ«¼ »α«µÑßßá. Äñ¡á¬«,
- »«ß¬«½∞¬π ó »á¼∩Γ¿, »«ñ½ÑªáΘÑ⌐ «ßó«í«ªñÑ¡¿ε, αáß»«½áúáεΓß∩ »ÑαÑñáóáѼδÑ ¡«-
- ó«⌐ »α«úαá¼¼Ñ »áαá¼ÑΓαδ, ∩ñα« »Ñαóδ¼ ñѽ«¼ ¬«»¿απÑΓ ¿σ ¿º áñαÑß¡«ú« »α«ßΓ-
- αá¡ßΓóá ó »α«¼ÑªπΓ«τ¡δ⌐ íπΣÑα ¡á óαѼ∩, »«¬á ¡Ñ íπñπΓ «ΓóÑñÑ¡δ «í½áßΓ¿ ñ½∩
- ¡«ó«ú« »α«ßΓαá¡ßΓóá »á¼∩Γ¿.
- ū߬«½∞¬π »áαá¼ÑΓαἿ Σπ¡¬µ¿¿ exec óδßΓπ»áεΓ »«½∞º«óáΓѽ∞߬¿Ñ áñαÑßá
- ¼áßß¿ó«ó ß¿¼ó«½∞¡δσ ßΓ᫬, ∩ñα« »« ¬áªñ«⌐ ßΓα«¬Ñ ß¡áτá½á ¬«»¿απÑΓ ó ß¿ßΓѼ-
- ¡πε »á¼∩Γ∞ áñαÑß ßΓ᫬¿, á ºáΓѼ ßá¼π ßΓ᫬π. ä½∩ σαá¡Ñ¡¿∩ ßΓ᫬¿ ó αạδσ
- óÑαß¿∩σ ß¿ßΓÑ¼δ ¼«úπΓ íδΓ∞ óδíαá¡δ αẽ¿τ¡δÑ ¼ÑßΓá. ùáΘÑ »α¿¡∩Γ« σαá¡¿Γ∞
- ßΓ᫬¿ ó ßΓÑ¬Ñ ∩ñαá (½«¬á½∞¡á∩ ßΓαπ¬Γπαá ñá¡¡δσ, »α¿¡áñ½ÑªáΘá∩ »α«úαá¼¼Ñ ∩ñ-
- αá), ¡á ¡Ñαáß»αÑñѽ∩Ѽδσ πτáßΓ¬áσ »á¼∩Γ¿ (Γᬿσ ¬á¬ ßΓαá¡¿µδ), ¬«Γ«αδÑ ¼«ª¡«
- ºá¡¿¼áΓ∞ Γ«½∞¬« óαѼѡ¡«, á Γá¬ªÑ ó« ó¡ÑΦ¡Ñ⌐ »á¼∩Γ¿ (¡á πßΓα«⌐ßΓóÑ óδúαπº-
- ¬¿).
- æ Γ«τ¬¿ ºαÑ¡¿∩ αÑ὿ºáµ¿¿ »α«ΘÑ óßÑú« ñ½∩ ¬«»¿α«óá¡¿∩ »áαá¼ÑΓα«ó ó ¡«óδ⌐
- »«½∞º«óáΓѽ∞߬¿⌐ ¬«¡ΓѬßΓ «íαáΓ¿Γ∞ß∩ ¬ ßΓѬπ ∩ñαá. Äñ¡á¬«, »«ß¬«½∞¬π αẼÑα
- ßΓѬá ∩ñαá, ¬á¬ »αá󿽫, «úαá¡¿τ¿óáÑΓß∩ ß¿ßΓѼ«⌐, á Γá¬ªÑ »«ß¬«½∞¬π »áαá¼ÑΓ-
- αδ Σπ¡¬µ¿¿ exec ¼«úπΓ ¿¼ÑΓ∞ »α«¿ºó«½∞¡πε ñ½¿¡π, φëà »«ñσ«ñ ß½ÑñπÑΓ ß«τÑΓáΓ∞
- ß ñαπú¿¼¿ »«ñσ«ñἿ. Åα¿ αáßß¼«ΓαÑ¡¿¿ ñαπú¿σ óáα¿á¡Γ«ó «íδτ¡« «ßΓá¡áó½¿óáεΓ-
- ß∩ ¡á ß»«ß«íÑ σαá¡Ñ¡¿∩, «íÑß»Ñτ¿óáεΘѼ ¡á¿í«½ÑÑ íδßΓαδ⌐ ñ«ßΓπ» ¬ ßΓ᫬á¼.
- àß½¿ ñ«ßΓπ» ¬ ßΓαá¡¿µá¼ »á¼∩Γ¿ ó ß¿ßΓÑ¼Ñ αÑ὿ºπÑΓß∩ ñ«ó«½∞¡« »α«ßΓ«, ßΓ᫬¿
- ß½ÑñπÑΓ αẼÑΘáΓ∞ ¡á ßΓαá¡¿µáσ, »«ß¬«½∞¬π «íαáΘÑ¡¿Ñ ¬ «»ÑαáΓ¿ó¡«⌐ »á¼∩Γ¿
- «ßπΘÑßΓó½∩ÑΓß∩ íδßΓαÑÑ, τѼ ¬ ó¡ÑΦ¡Ñ⌐ (πßΓα«⌐ßΓóπ óδúαπº¬¿).
- Å«ß½Ñ ¬«»¿α«óá¡¿∩ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ exec ó ß¿ßΓѼ¡πε »á¼∩Γ∞ ∩ñα« «Γß«Ñ-
- ñ¿¡∩ÑΓ «í½áßΓ¿, αá¡ÑÑ »α¿ß«Ññ¿¡Ñ¡¡δÑ ¬ »α«µÑßßπ, ¿ß»«½∞ºπ∩ á½ú«α¿Γ¼
- detachreg. ìÑ߬«½∞¬« »«ºªÑ ¼δ ÑΘÑ »«ú«ó«α¿¼ « ߻ѵ¿á½∞¡δσ ñÑ⌐ßΓó¿∩σ, óδ»«½-
- ¡∩Ѽδσ ó «Γ¡«ΦÑ¡¿¿ «í½áßΓÑ⌐ ¬«¼á¡ñ. è αáßß¼áΓα¿óáѼ«¼π ¼«¼Ñ¡Γπ »α«µÑßß πªÑ
- ½¿ΦÑ¡ »«½∞º«óáΓѽ∞߬«ú« ¬«¡ΓѬßΓá ¿ »«φΓ«¼π 󫺡¿¬¡«óÑ¡¿Ñ ó ñá½∞¡Ñ⌐ΦѼ ½εí«⌐
- «Φ¿í¬¿ ¡Ñ¿ºíѪ¡« íπñÑΓ »α¿ó«ñ¿Γ∞ ¬ ºáóÑαΦÑ¡¿ε »α«µÑßßá »« ß¿ú¡á½π. Æá¬¿¼¿
- «Φ¿í¬á¼¿ ¼«úπΓ íδΓ∞ «íαáΘÑ¡¿Ñ ¬ »α«ßΓαá¡ßΓóπ, ¡Ñ «»¿ßá¡¡«¼π ó Γáí½¿µÑ «í½áß-
- ΓÑ⌐ ∩ñαá, »«»δΓ¬á ºáúαπº¿Γ∞ »α«úαá¼¼π, ¿¼ÑεΘπε ¡Ññ«»πßΓ¿¼« í«½∞Φ«⌐ αẼÑα
- ¿½¿ ¿ß»«½∞ºπεΘπε «í½áßΓ¿ ß »ÑαÑßѬáεΘ¿¼¿ß∩ áñαÑßἿ, ¿ ñα. ƒñα« óδñѽ∩ÑΓ ¿
- »α¿ß«Ññ¿¡∩ÑΓ ¬ »α«µÑßßπ «í½áßΓ¿ ¬«¼á¡ñ ¿ ñá¡¡δσ, ºáúαπªáÑΓ ó «»ÑαáΓ¿ó¡πε »á-
- ¼∩Γ∞ ß«ñÑন¼«Ñ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á (á½ú«α¿Γ¼δ allocreg, attachreg ¿ loadreg,
- ß««ΓóÑΓßΓóÑ¡¡«). Äí½áßΓ∞ ñá¡¡δσ »α«µÑßßá ¿º¡áτá½∞¡« »«ñÑ½Ñ¡á ¡á ñóÑ τáßΓ¿:
-
-
- ───────────────────────────────────────
- (**) é PDP 11 "¼áú¿τÑ߬¿Ñ τ¿ß½á" ¿¼ÑεΓ º¡áτÑ¡¿∩, ß««ΓóÑΓßΓóπεΘ¿Ñ ¬«¼á¡ñá¼
- »ÑαÑσ«ñá; »α¿ óδ»«½¡Ñ¡¿¿ φΓ¿σ ¬«¼á¡ñ ó αá¡¡¿σ óÑαß¿∩σ ß¿ßΓѼδ π»αáó½Ñ-
- ¡¿Ñ »ÑαÑñáóὫß∞ ó αạδÑ ¼ÑßΓá »α«úαá¼¼δ ó ºáó¿ß¿¼«ßΓ¿ «Γ αẼÑαá ºá-
- ú«½«ó¬á ¿ «Γ Γ¿»á ¿ß»«½¡∩Ѽ«ú« Σá⌐½á. ¥Γá «ß«íÑ¡¡«ßΓ∞ í«½∞ΦÑ ¡Ñ ¿ß»«½∞-
- ºπÑΓß∩ ß ΓÑσ »«α, ¬á¬ ß¿ßΓѼá ßΓá½á αáºαáíáΓδóáΓ∞ß∩ ¡á ∩ºδ¬Ñ æ¿.
-
-
-
- 206
-
- ñá¡¡δÑ, ¿¡¿µ¿á½¿ºáµ¿∩ ¬«Γ«αδσ íδ½á óδ»«½¡Ñ¡á ó« óαѼ∩ ¬«¼»¿½∩µ¿¿, ¿ ñá¡¡δÑ,
- ¡Ñ «»αÑñѽѡ¡δÑ ¬«¼»¿½∩Γ«α«¼ ("bss"). Äí½áßΓ∞ »á¼∩Γ¿ »Ñαó«¡áτá½∞¡« óδñѽ∩ÑΓ-
- ß∩ ñ½∩ »α«¿¡¿µ¿á½¿º¿α«óá¡¡δσ ñá¡¡δσ. çáΓѼ ∩ñα« πóѽ¿τ¿óáÑΓ αẼÑα «í½áßΓ¿
- ñá¡¡δσ ñ½∩ αẼÑΘÑ¡¿∩ ñá¡¡δσ Γ¿»á "bss" (á½ú«α¿Γ¼ growreg) ¿ «í¡π½∩ÑΓ ¿σ
- º¡áτÑ¡¿∩. ìừ߽Ññ«¬ ∩ñα« óδñѽ∩ÑΓ ¿ »α¿ß«Ññ¿¡∩ÑΓ ¬ »α«µÑßßπ «í½áßΓ∞ ßΓÑ¬á ¿
- «Γó«ñ¿Γ »α«ßΓαá¡ßΓó« »á¼∩Γ¿ ñ½∩ σαá¡Ñ¡¿∩ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ exec. àß½¿ »áαá-
- ¼ÑΓαδ Σπ¡¬µ¿¿ αẼÑΘáεΓß∩ ¡á ßΓαá¡¿µáσ, ΓÑ ªÑ ßΓαá¡¿µδ ¼«úπΓ íδΓ∞ ¿ß»«½∞º«-
- óá¡δ »«ñ ßΓѬ. é »α«Γ¿ó¡«¼ ß½πτáÑ »áαá¼ÑΓαδ Σπ¡¬µ¿¿ αẼÑΘáεΓß∩ ó ßΓÑ¬Ñ ºá-
- ñáτ¿.
- é »α«ßΓαá¡ßΓóÑ »α«µÑßßá ∩ñα« ßΓ¿αáÑΓ áñαÑßá »«½∞º«óáΓѽ∞߬¿σ Σπ¡¬µ¿⌐ «í-
- αáí«Γ¬¿ ß¿ú¡á½«ó, »«ß¬«½∞¬π ó ¡«ó«¼ »«½∞º«óáΓѽ∞߬«¼ ¬«¡ΓѬßΓÑ «¡¿ ΓÑα∩εΓ
- ßó«Ñ º¡áτÑ¡¿Ñ. Äñ¡á¬« ¿ ó ¡«ó«¼ ¬«¡ΓѬßΓÑ αѬ«¼Ñ¡ñᵿ¿ »« ¿ú¡«α¿α«óá¡¿ε ΓÑσ
- ¿½¿ ¿¡δσ ß¿ú¡á½«ó «ßΓáεΓß∩ ó ß¿½Ñ. ƒñα« πßΓá¡áó½¿óáÑΓ ó αÑú¿ßΓαáσ ñ½∩ αѪ¿¼á
- ºáñáτ¿ º¡áτÑ¡¿∩ ¿º ß«σαá¡Ñ¡¡«ú« αÑú¿ßΓα«ó«ú« ¬«¡ΓѬßΓá, ó τáßΓ¡«ßΓ¿ »Ñαó«¡á-
- τá½∞¡«Ñ º¡áτÑ¡¿Ñ π¬áºáΓѽ∩ óÑαΦ¿¡δ ßΓѬá (sp) ¿ ßτÑΓτ¿¬á ¬«¼á¡ñ (pc): »Ñαó«-
- ¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ¬«¼á¡ñ í佫 ºá¡ÑßÑ¡« ºáúαπºτ¿¬«¼ ó ºáú«½«ó«¬
- Σá⌐½á. ä½∩ setuid-»α«úαá¼¼ ¿ ñ½∩ Γαáßß¿α«ó¬¿ »α«µÑßßá ∩ñα« »αÑñ»α¿¡¿¼áÑΓ
- «ß«íδÑ ñÑ⌐ßΓó¿∩, ¡á ¬«Γ«αδσ ¼δ ÑΘÑ «ßΓá¡«ó¿¼ß∩ ó« óαѼ∩ αáßß¼«ΓαÑ¡¿∩ ú½áó 8
- ¿ 11, ß««ΓóÑΓßΓóÑ¡¡«. ìᬫ¡Ñµ, ∩ñα« ºá»π߬áÑΓ á½ú«α¿Γ¼ iput, «ßó«í«ªñá∩ ¿¡-
- ñѬß, óδñѽѡ¡δ⌐ »« á½ú«α¿Γ¼π namei ó ßἫ¼ ¡áτá½Ñ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec.
- ǽú«α¿Γ¼δ namei ¿ iput ó Σπ¡¬µ¿¿ exec óδ»«½¡∩εΓ α«½∞, »«ñ«í¡πε Γ«⌐, ¬«Γ«απε
- «¡¿ óδ»«½¡∩εΓ »α¿ «Γ¬αδΓ¿¿ ¿ ºá¬αδΓ¿¿ Σá⌐½á; ß«ßΓ«∩¡¿Ñ Σá⌐½á ó« óαѼ∩ óδ»«½-
- ¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec »«σ«ªÑ ¡á ß«ßΓ«∩¡¿Ñ «Γ¬αδΓ«ú« Σá⌐½á, Ñß½¿ ¡Ñ »α¿¡¿¼áΓ∞ ó«
- ó¡¿¼á¡¿Ñ «ΓßπΓßΓó¿Ñ ºá»¿ß¿ « Σá⌐½Ñ ó Γáí½¿µÑ Σá⌐½«ó. Å« óδσ«ñÑ ¿º Σπ¡¬µ¿¿
- »α«µÑßß ¿ß»«½¡∩ÑΓ ΓѬßΓ ¡«ó«⌐ »α«úαá¼¼δ. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, »α«µÑßß «ßΓáÑΓß∩ ΓѼ
- ªÑ, τΓ« ¿ ñ« óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿; Ñú« ¿ñÑ¡Γ¿Σ¿¬áΓ«α ¡Ñ ¿º¼Ñ¡¿½ß∩, ¬á¬ ¡Ñ ¿º-
- ¼Ñ¡¿½«ß∞ ¿ Ñú« ¼ÑßΓ« ó ¿Ñαáασ¿¿ »α«µÑßß«ó. 꺼ѡѡ¿ε »«ñóÑαúß∩ Γ«½∞¬« »«½∞-
- º«óáΓѽ∞߬¿⌐ ¬«¡ΓѬßΓ »α«µÑßßá.
-
- ┌───────────────────────────────────────────────────────┐
- │ main() │
- │ { │
- │ int status; │
- │ if (fork() == 0) │
- │ execl("/bin/date","date",0); │
- │ wait(&status); │
- │ } │
- └───────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.21. Åα¿¼Ñα ¿ß»«½∞º«óá¡¿∩ Σπ¡¬µ¿¿ exec
-
-
- é ¬áτÑßΓóÑ »α¿¼Ñαá ¼«ª¡« »α¿óÑßΓ¿ »α«úαá¼¼π (É¿ßπ¡«¬ 7.21), ó ¬«Γ«α«⌐
- ß«ºñáÑΓß∩ »α«µÑßß-»«Γ«¼«¬, ºá»π߬áεΘ¿⌐ Σπ¡¬µ¿ε exec. æαáºπ »« ºáóÑαΦÑ¡¿¿
- Σπ¡¬µ¿¿ fork »α«µÑßß-α«ñ¿Γѽ∞ ¿ »α«µÑßß-»«Γ«¼«¬ ¡áτ¿¡áεΓ ¿ß»«½¡∩Γ∞ ¡Ñºáó¿ß¿-
- ¼« ñαπú «Γ ñαπúá ¬«»¿¿ «ñ¡«⌐ ¿ Γ«⌐ ªÑ »α«úαá¼¼δ. è ¼«¼Ñ¡Γπ ó맮óá »α«µÑß-
- ß«¼-»«Γ«¼¬«¼ Σπ¡¬µ¿¿ exec ó Ñú« «í½áßΓ¿ ¬«¼á¡ñ ¡áσ«ñ∩Γß∩ ¿¡ßΓαπ¬µ¿¿ φΓ«⌐
- »α«úαá¼¼δ, ó «í½áßΓ¿ ñá¡¡δσ αáß»«½áúáεΓß∩ ßΓ᫬¿ "/bin/date" ¿ "date", á ó
- ßΓÑ¬Ñ - ºá»¿ß¿, ¬«Γ«αδÑ íπñπΓ ¿ºó½ÑτÑ¡δ »« óδσ«ñÑ ¿º exec. ƒñα« ¿ΘÑΓ Σá⌐½
- "/bin/date" ó Σá⌐½«ó«⌐ ß¿ßΓѼÑ, «í¡áαπª¿ó Ñú«, πº¡áÑΓ, τΓ« Ñú« ¼«ªÑΓ ¿ß»«½-
- ¡¿Γ∞ ½εí«⌐ »«½∞º«óáΓѽ∞, á Γá¬ªÑ Γ«, τΓ« «¡ »αÑñßΓáó½∩ÑΓ ß«í«⌐ ºáúαπº«τ¡δ⌐
- ¼«ñπ½∞, ú«Γ«óδ⌐ ñ½∩ ¿ß»«½¡Ñ¡¿∩. Å« πß½«ó¿ε »Ñαóδ¼ »áαá¼ÑΓα«¼ Σπ¡¬µ¿¿ exec,
- ó¬½ετáÑ¼δ¼ ó ß»¿ß«¬ »áαá¼ÑΓα«ó argv, ∩ó½∩ÑΓß∩ ¿¼∩ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á (»«ß-
- ½Ññ¡∩∩ ¬«¼»«¡Ñ¡Γá ¿¼Ñ¡¿ »πΓ¿ »«¿ß¬á Σá⌐½á). Æá¬¿¼ «íαẫ¼, »α«µÑßß ¿¼ÑÑΓ
- ñ«ßΓπ» ¬ ¿¼Ñ¡¿ »α«úαá¼¼δ ¡á »«½∞º«óáΓѽ∞߬«¼ πα«ó¡Ñ, τΓ« ¿¡«úñá ¼«ªÑΓ «¬á-
- ºáΓ∞ß∩ »«½Ñº¡δ¼ (***). çáΓѼ ∩ñα« ¬«»¿απÑΓ ßΓ᫬¿ "/bin/date" ¿ "date" ó«
- ó¡πΓαÑ¡¡εε ßΓαπ¬Γπαπ σαá¡Ñ¡¿∩ ¿ «ßó«í«ªñáÑΓ «í½áßΓ¿ ¬«¼á¡ñ, ñá¡¡δσ ¿ ßΓѬá,
- ºá¡¿¼áѼδÑ »α«µÑßß«¼. Åα«µÑßßπ óδñѽ∩εΓß∩ ¡«óδÑ «í½áßΓ¿ ¬«¼á¡ñ, ñá¡¡δσ ¿
- ßΓѬá, ó «í½áßΓ∞ ¬«¼á¡ñ »ÑαÑ»¿ßδóáÑΓß∩ ¬«¼á¡ñ¡á∩ ßѬµ¿∩ Σá⌐½á "/bin/date", ó
-
- 207
-
- ───────────────────────────────────────
- (***) ìá»α¿¼Ñα, ó óÑαß¿¿ V ßΓá¡ñáαΓ¡δÑ »α«úαá¼¼δ »ÑαÑ¿¼Ñ¡«óá¡¿∩ Σá⌐½á (mv),
- ¬«»¿α«óá¡¿∩ Σá⌐½á (cp) ¿ ¬«¼»«¡«ó¬¿ Σá⌐½á (ln), »«ß¬«½∞¬π ¿ß»«½¡∩εΓ
- »«σ«ª¿Ñ ñÑ⌐ßΓó¿∩, óδºδóáεΓ «ñ¿¡ ¿ ëà ªÑ ¿ß»«½¡∩Ѽδ⌐ Σá⌐½. Å« ¿¼Ñ¡¿
- óδºδóáѼ«⌐ »α«úαá¼¼δ »α«µÑßß πº¡áÑΓ, ¬á¬¿Ñ ñÑ⌐ßΓó¿∩ ó ¡áßΓ«∩Θ¿⌐ ¼«¼Ñ¡Γ
- ΓαÑíπεΓß∩ »«½∞º«óáΓѽε.
-
- «í½áßΓ∞ ñá¡¡δσ - ßѬµ¿∩ ñá¡¡δσ Σá⌐½á. ƒñα« ó«ßßΓá¡áó½¿óáÑΓ »Ñαó«¡áτá½∞¡δ⌐
- ß»¿ß«¬ »áαá¼ÑΓα«ó (ó ñá¡¡«¼ ß½πτáÑ φΓ« ßΓ᫬á ß¿¼ó«½«ó "date") ¿ »«¼ÑΘáÑΓ
- Ñú« ó «í½áßΓ∞ ßΓѬá. éδºóáó Σπ¡¬µ¿ε exec, »α«µÑßß-»«Γ«¼«¬ »αѬαáΘáÑΓ óδ»«½-
- ¡Ñ¡¿Ñ ßΓáα«⌐ »α«úαá¼¼δ ¿ »ÑαÑσ«ñ¿Γ ¬ óδ»«½¡Ñ¡¿ε »α«úαá¼¼δ
-
- "date"; ¬«úñá »α«úαá¼¼á "date" ºáóÑαΦ¿Γß∩, »α«µÑßß-α«ñ¿Γѽ∞, «ª¿ñáεΘ¿⌐ φΓ«ú«
- ¼«¼Ñ¡Γá, »«½πτ¿Γ ¬«ñ ºáóÑαΦÑ¡¿∩ Σπ¡¬µ¿¿ exit.
- 黽«Γ∞ ñ« ¡áßΓ«∩ΘÑú« ¼«¼Ñ¡Γá ¼δ »αÑñ»«½áú὿, τΓ« ¬«¼á¡ñδ ¿ ñá¡¡δÑ αáº-
- ¼ÑΘáεΓß∩ ó αạδσ ßѬµ¿∩σ ¿ß»«½¡∩Ѽ«⌐ »α«úαá¼¼δ ¿, ß½Ññ«óáΓѽ∞¡«, ó αạδσ
- «í½áßΓ∩σ ΓѬπΘÑú« »α«µÑßßá. Æá¬«Ñ αẼÑΘÑ¡¿Ñ ¿¼ÑÑΓ ñóá «ß¡«ó¡δσ »αÑ¿¼πΘÑßΓ-
- óá: »α«ßΓ«Γá «αúá¡¿ºáµ¿¿ ºáΘ¿Γδ «Γ ¡Ñßᡬµ¿«¡¿α«óá¡¡«ú« ñ«ßΓπ»á ¿ 󫺼«ª-
- ¡«ßΓ∞ αáºñѽѡ¿∩ «í½áßΓÑ⌐ αẽ¿τ¡δ¼¿ »α«µÑßßἿ. àß½¿ íδ ¬«¼á¡ñδ ¿ ñá¡¡δÑ
- ¡áσ«ñ¿½¿ß∞ ó «ñ¡«⌐ «í½áßΓ¿, ß¿ßΓÑ¼á ¡Ñ ß¼«ú½á íδ »αÑñ«ΓóαáΓ¿Γ∞ ºáΓ¿αá¡¿Ñ ¬«-
- ¼á¡ñ, »«ß¬«½∞¬π Ñ⌐ ¡Ñ í뫨 íδ ¿ºóÑßΓ¡δ áñαÑßá, »« ¬«Γ«αδ¼ «¡¿ αáß»«½áúáεΓß∩.
- àß½¿ ªÑ ¬«¼á¡ñδ ¿ ñá¡¡δÑ ¡áσ«ñ∩Γß∩ ó αạδσ «í½áßΓ∩σ, ß¿ßΓÑ¼á ¿¼ÑÑΓ ó«º¼«ª-
- ¡«ßΓ∞ »«½∞º«óáΓ∞ß∩ ¼Ñσá¡¿º¼á¼¿ á»»áαáΓ¡«⌐ ºáΘ¿Γδ «í½áßΓ¿ ¬«¼á¡ñ »α«µÑßßá.
- è«úñá »α«µÑßß ß½πτá⌐¡« »«»δΓáÑΓß∩ τΓ«-Γ« ºá»¿ßáΓ∞ ó «í½áßΓ∞, ºá¡∩Γπε ¬«¼á¡-
- ñἿ, «¡ »«½πτ¿Γ «Γ¬áº, »«α«ªñÑ¡¡δ⌐ ß¿ßΓѼ«⌐ ºáΘ¿Γδ ¿ »α¿ó«ñ∩Θ¿⌐ «íδτ¡« ¬
- áóáα¿⌐¡«¼π ºáóÑαΦÑ¡¿ε »α«µÑßßá.
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <signal.h> │
- │ main() │
- │ { │
- │ int i,*ip; │
- │ extern f(),sigcatch(); │
- │ │
- │ ip = (int *)f; /* »α¿ßó«Ñ¡¿Ñ »ÑαѼѡ¡«⌐ ip º¡áτÑ¡¿∩ áñ-│
- │ αÑßá Σπ¡¬µ¿¿ f */ │
- │ for (i = 0; i < 20; i++) │
- │ signal(i,sigcatch); │
- │ *ip = 1; /* »«»δΓ¬á ºáΓÑαÑΓ∞ áñαÑß Σπ¡¬µ¿¿ f */ │
- │ printf("»«ß½Ñ »α¿ßó«Ñ¡¿∩ º¡áτÑ¡¿∩ ip\n"); │
- │ f(); │
- │ } │
- │ │
- │ f() │
- │ { │
- │ } │
- │ │
- │ sigcatch(n) │
- │ int n; │
- │ { │
- │ printf("»α¿¡∩Γ ß¿ú¡á½ %d\n",n); │
- │ exit(1); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.22. Åα¿¼Ñα »α«úαá¼¼δ, óÑñπΘÑ⌐ ºá»¿ß∞ ó «í½áßΓ∞ ¬«¼á¡ñ
-
- é ¬áτÑßΓóÑ »α¿¼Ñαá ¼«ª¡« »α¿óÑßΓ¿ »α«úαá¼¼π (É¿ßπ¡«¬ 7.22), ¬«Γ«αá∩
- »α¿ßóá¿óáÑΓ »ÑαѼѡ¡«⌐ ip º¡áτÑ¡¿Ñ áñαÑßá Σπ¡¬µ¿¿ f ¿ ºáΓѼ ñѽáÑΓ αáß»«α∩-
-
- 208
-
- ªÑ¡¿Ñ »α¿¡¿¼áΓ∞ óßÑ ß¿ú¡á½δ. àß½¿ »α«úαá¼¼á ߬«¼»¿½¿α«óá¡á Γá¬, τΓ« ¬«¼á¡ñδ
- ¿ ñá¡¡δÑ αáß»«½áúáεΓß∩ ó αạδσ «í½áßΓ∩σ, »α«µÑßß, ¿ß»«½¡∩εΘ¿⌐ »α«úαá¼¼π,
- »α¿ »«»δ⪥ ºá»¿ßáΓ∞ τΓ«-Γ« »« áñαÑßπ ó ip óßΓαÑΓ¿Γ »«α«ªñÑ¡¡δ⌐ ß¿ßΓѼ«⌐ ºá-
- Θ¿Γδ «Γ¬áº, »«ß¬«½∞¬π «í½áßΓ∞ ¬«¼á¡ñ ºáΘ¿ΘÑ¡á «Γ ºá»¿ß¿. Åα¿ αáí«ΓÑ ¡á
- ¬«¼»∞εΓÑαÑ AT&T 3B20 ∩ñα« »«ßδ½áÑΓ »α«µÑßßπ ß¿ú¡á½ SIGBUS, ó ñαπú¿σ ß¿ßΓѼáσ
- 󫺼«ª¡á »«ß佬á ñαπú¿σ ß¿ú¡á½«ó. Åα«µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½ ¿ ºáóÑαΦáÑΓß∩, ¡Ñ
- ñ«⌐ñ∩ ñ« óδ»«½¡Ñ¡¿∩ ¬«¼á¡ñδ óδó«ñá ¡á »ÑτáΓ∞ ó »α«µÑñπαÑ main. Äñ¡á¬«, Ñß½¿
- »α«úαá¼¼á ߬«¼»¿½¿α«óá¡á Γá¬, τΓ« ¬«¼á¡ñδ ¿ ñá¡¡δÑ αáß»«½áúáεΓß∩ ó «ñ¡«⌐ «í-
- ½áßΓ¿ (ó «í½áßΓ¿ ñá¡¡δσ), ∩ñα« ¡Ñ »«⌐¼ÑΓ, τΓ« »α«µÑßß »δΓáÑΓß∩ ºáΓÑαÑΓ∞ áñ-
- αÑß Σπ¡¬µ¿¿ f. ÇñαÑß f ßΓá¡ÑΓ αáó¡δ¼ 1. Åα«µÑßß ¿ß»«½¡¿Γ ¬«¼á¡ñπ óδó«ñá ¡á
- »ÑτáΓ∞ ó »α«µÑñπαÑ main, ¡« ¬«úñá ºá»πßΓ¿Γ Σπ¡¬µ¿ε f, »α«¿º«⌐ñÑΓ «Φ¿í¬á,
- ßó∩ºá¡¡á∩ ß »«»δΓ¬«⌐ óδ»«½¡Ñ¡¿∩ ºá»αÑΘÑ¡¡«⌐ ¬«¼á¡ñδ. ƒñα« »«Φ½ÑΓ »α«µÑßßπ
- ß¿ú¡á½ SIGILL ¿ »α«µÑßß ºáóÑαΦ¿Γß∩.
- Éáß»«½«ªÑ¡¿Ñ ¬«¼á¡ñ ¿ ñá¡¡δσ ó αạδσ «í½áßΓ∩σ «í½ÑúτáÑΓ »«¿ß¬ ¿ »αÑñ«Γ-
- óαáΘÑ¡¿Ñ «Φ¿í«¬ áñαÑßᵿ¿. ÆÑ¼ ¡Ñ ¼Ñ¡ÑÑ, ó αá¡¡¿σ óÑαß¿∩σ ß¿ßΓѼδ UNIX ¬«-
- ¼á¡ñδ ¿ ñá¡¡δÑ αáºαÑΦὫß∞ αáß»«½áúáΓ∞ ó «ñ¡«⌐ «í½áßΓ¿, »«ß¬«½∞¬π ¡á ¼áΦ¿¡áσ
- PDP αẼÑα »α«µÑßßá íδ½ ß¿½∞¡« «úαá¡¿τÑ¡: »α«úαá¼¼δ ¿¼Ñ½¿ ¼Ñ¡∞Φ¿⌐ αẼÑα ¿
- ßπΘÑßΓóÑ¡¡« ¼Ñ¡∞Φπε ßÑú¼Ñ¡Γᵿε, Ñß½¿ ¬«¼á¡ñδ ¿ ñá¡¡δÑ ºá¡¿¼á½¿ «ñ¡π ¿ Γπ ªÑ
- «í½áßΓ∞. é »«ß½Ññ¡¿σ óÑαß¿∩σ ß¿ßΓѼδ Γᬿσ ßΓα«ú¿σ «úαá¡¿τÑ¡¿⌐ ¡á αẼÑα
- »α«µÑßßá ¡ÑΓ ¿ ó ñá½∞¡Ñ⌐ΦѼ 󫺼«ª¡«ßΓ∞ ºáúαπº¬¿ ¬«¼á¡ñ ¿ ñá¡¡δσ ó «ñ¡π «í-
- ½áßΓ∞ ¬«¼»¿½∩Γ«αἿ ¡Ñ íπñÑΓ »«ññÑনóáΓ∞ß∩.
- éΓ«α«Ñ »αÑ¿¼πΘÑßΓó« αáºñѽ∞¡«ú« σαá¡Ñ¡¿∩ ¬«¼á¡ñ ¿ ñá¡¡δσ ß«ßΓ«¿Γ ó ó«º-
- ¼«ª¡«ßΓ¿ ß«ó¼ÑßΓ¡«ú« ¿ß»«½∞º«óá¡¿∩ «í½áßΓÑ⌐ »α«µÑßßἿ. àß½¿ »α«µÑßß ¡Ñ ¼«-
- ªÑΓ óÑßΓ¿ ºá»¿ß∞ ó «í½áßΓ∞ ¬«¼á¡ñ, ¬«¼á¡ñδ »α«µÑßßá ¡Ñ »αÑΓÑα»ÑóáεΓ ¡¿¬á¬¿σ
- ¿º¼Ñ¡Ñ¡¿⌐ ß Γ«ú« ¼«¼Ñ¡Γá, ¬á¬ ∩ñα« ºáúαπº¿½« ¿σ ó «í½áßΓ∞ ¬«¼á¡ñ ¿º ¬«¼á¡ñ-
- ¡«⌐ ßѬµ¿¿ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á. àß½¿ «ñ¿¡ ¿ ëà ªÑ Σá⌐½ ¿ß»«½¡∩ÑΓß∩ ¡Ñ߬«½∞-
- ¬¿¼¿ »α«µÑßßἿ, ó µÑ½∩σ φ¬«¡«¼¿¿ »á¼∩Γ¿ «¡¿ ¼«úπΓ ¿¼ÑΓ∞ «ñ¡π «í½áßΓ∞ ¬«¼á¡ñ
- ¡á óßÑσ. Æá¬¿¼ «íαẫ¼, ¬«úñá ∩ñα« »α¿ óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿¿ exec «Γó«ñ¿Γ «í-
- ½áßΓ∞ »«ñ ¬«¼á¡ñδ »α«µÑßßá, «¡« »α«óÑα∩ÑΓ, ¿¼ÑÑΓß∩ ½¿ 󫺼«ª¡«ßΓ∞ ß«ó¼ÑßΓ¡«-
- ú« ¿ß»«½∞º«óá¡¿∩ »α«µÑßßἿ ¬«¼á¡ñ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á, τΓ« «»αÑñѽ∩ÑΓß∩ "¼á-
- ú¿τÑ߬¿¼ τ¿ß½«¼" ó ºáú«½«ó¬Ñ Σá⌐½á. àß½¿ ñá, Γ« ß »«¼«Θ∞ε á½ú«α¿Γ¼á xalloc
- ∩ñα« ¿ΘÑΓ ßπΘÑßΓóπεΘπε «í½áßΓ∞ ß ¬«¼á¡ñἿ Σá⌐½á ¿½¿ ¡áº¡áτáÑΓ ¡«óπε ó ß½π-
- τáÑ ÑÑ «ΓßπΓßΓó¿∩ (ß¼. É¿ßπ¡«¬ 7.23).
- êß»«½¡∩∩ á½ú«α¿Γ¼ xalloc, ∩ñα« »α«ß¼áΓα¿óáÑΓ ß»¿ß«¬ á¬Γ¿ó¡δσ «í½áßΓÑ⌐ ó
- »«¿ß¬áσ «í½áßΓ¿ ß ¬«¼á¡ñἿ Σá⌐½á, ¿¡ñÑ¬ß ¬«Γ«α«ú« ß«ó»áñáÑΓ ß ¿¡ñѬ߫¼ ¿ß-
- »«½¡∩Ѽ«ú« Σá⌐½á. é ß½πτáÑ ÑÑ «ΓßπΓßΓó¿∩ ∩ñα« óδñѽ∩ÑΓ ¡«óπε «í½áßΓ∞ (á½ú«-
- α¿Γ¼ allocreg), »α¿ß«Ññ¿¡∩ÑΓ ÑÑ ¬ »α«µÑßßπ (á½ú«α¿Γ¼ attachreg), ºáúαπªáÑΓ
- ÑÑ ó »á¼∩Γ∞ (á½ú«α¿Γ¼ loadreg) ¿ ºáΘ¿ΘáÑΓ «Γ ºá»¿ß¿ (read-only). ū߽Ññ¡¿⌐
- Φáú »αÑñ»«½áúáÑΓ, τΓ« »α¿ »«»δ⪥ »α«µÑßßá ºá»¿ßáΓ∞ τΓ«-½¿í« ó «í½áßΓ∞ ¬«-
- ¼á¡ñ íπñÑΓ »«½πτÑ¡ «Γ¬áº, óδºóá¡¡δ⌐ ß¿ßΓѼ«⌐ ºáΘ¿Γδ »á¼∩Γ¿. é ß½πτáÑ «í¡áαπ-
- ªÑ¡¿∩ «í½áßΓ¿ ß ¬«¼á¡ñἿ Σá⌐½á ó ß»¿ß¬Ñ á¬Γ¿ó¡δσ «í½áßΓÑ⌐ «ßπΘÑßΓó½∩ÑΓß∩
- »α«óÑα¬á ÑÑ ¡á½¿τ¿∩ ó »á¼∩Γ¿ («¡á ¼«ªÑΓ íδΓ∞ ½¿í« ºáúαπªÑ¡á ó »á¼∩Γ∞, ½¿í«
- óδúαπªÑ¡á ¿º »á¼∩Γ¿) ¿ »α¿ß«Ññ¿¡Ñ¡¿Ñ ÑÑ ¬ »α«µÑßßπ. é ºáóÑαΦÑ¡¿Ñ óδ»«½¡Ñ¡¿∩
- á½ú«α¿Γ¼á xalloc ∩ñα« ß¡¿¼áÑΓ ß «í½áßΓ¿ í½«¬¿α«ó¬π, á »«ºñ¡ÑÑ, ß½Ññπ∩ á½ú«-
- α¿Γ¼π detachreg »α¿ óδ»«½¡Ñ¡¿¿ Σπ¡¬µ¿⌐ exit ¿½¿ exec, π¼Ñ¡∞ΦáÑΓ º¡áτÑ¡¿Ñ
- ßτÑΓτ¿¬á «í½áßΓÑ⌐. é Γαáñ¿µ¿«¡¡δσ αÑ὿ºáµ¿∩σ ß¿ßΓÑ¼δ »«ññÑনóáÑΓß∩ Γáí½¿µá
- ¬«¼á¡ñ, ¬ ¬«Γ«α«⌐ ∩ñα« «íαáΘáÑΓß∩ ó ß½πτá∩σ, »«ñ«í¡δσ «»¿ßá¡¡«¼π. Æá¬¿¼ «í-
- αẫ¼, ß«ó«¬π»¡«ßΓ∞ «í½áßΓÑ⌐ ¬«¼á¡ñ ¼«ª¡« αáßß¼áΓα¿óáΓ∞ ¬á¬ ¡«óπε óÑαß¿ε
- φΓ«⌐ Γáí½¿µδ.
- ìừ¼¡¿¼, τΓ« Ñß½¿ «í½áßΓ∞ »α¿ óδ»«½¡Ñ¡¿¿ á½ú«α¿Γ¼á allocreg (Éáºñѽ
- 6.5.2) óδñѽ∩ÑΓß∩ ó»ÑαóδÑ, ∩ñα« πóѽ¿τ¿óáÑΓ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡-
- ñѬß, áßß«µ¿¿α«óá¡¡δ⌐ ß «í½áßΓ∞ε, »α¿ φΓ«¼ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á¼¿ πªÑ
- í佫 πóѽ¿τÑ¡« ó ßἫ¼ ¡áτá½Ñ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec (á½ú«α¿Γ¼ namei). Å«ß-
- ¬«½∞¬π ∩ñα« π¼Ñ¡∞ΦáÑΓ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á Γ«½∞¬« «ñ¿¡ αẠó ºáóÑαΦÑ¡¿Ñ óδ»«½-
- ¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec (»« á½ú«α¿Γ¼π iput), º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡ñѬß
- Σá⌐½á, áßß«µ¿¿α«óá¡¡«ú« ß αáºñѽ∩Ѽ«⌐ «í½áßΓ∞ε ¬«¼á¡ñ ¿ ¿ß»«½¡∩Ѽ«ú« ó ¡áß-
- Γ«∩Θ¿⌐ ¼«¼Ñ¡Γ, αáó¡« »« ¼Ñ¡∞ΦÑ⌐ ¼ÑαÑ 1. Å«φΓ«¼π ¬«úñá »α«µÑßß αáºαδóáÑΓ
- ßó∩º∞ ß Σá⌐½«¼ (Σπ¡¬µ¿∩ unlink), ß«ñÑন¼«Ñ Σá⌐½á «ßΓáÑΓß∩ ¡ÑΓα«¡πΓδ¼ (¡Ñ
- »αÑΓÑα»ÑóáÑΓ ¿º¼Ñ¡Ñ¡¿⌐). Å«ß½Ñ ºáúαπº¬¿ ó »á¼∩Γ∞ ßá¼ Σá⌐½ ∩ñαπ ßΓá¡«ó¿Γß∩
-
- 209
-
- ¡Ñ¡πªÑ¡, ∩ñα« ¿¡ΓÑαÑßπÑΓ Γ«½∞¬« π¬áºáΓѽ∞ ¡á ¬«»¿ε ¿¡ñѬßá Σá⌐½á ó »á¼∩Γ¿,
- ß«ñÑαªáΘ¿⌐ß∩ ó Γáí½¿µÑ «í½áßΓÑ⌐; φëà π¬áºáΓѽ∞ ¿ íπñÑΓ ¿ñÑ¡Γ¿Σ¿µ¿α«óáΓ∞
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ xalloc /* óδñѽѡ¿Ñ ¿ ¿¡¿µ¿á½¿ºáµ¿∩ «í½áßΓ¿ │
- │ ¬«¼á¡ñ */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¿¡ñÑ¬ß ¿ß»«½¡∩Ѽ«ú« Σá⌐½á │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ Ñß½¿ (¿ß»«½¡∩Ѽδ⌐ Σá⌐½ ¡Ñ ¿¼ÑÑΓ «Γñѽ∞¡«⌐ «í½áßΓ¿ ¬«¼á¡ñ)│
- │ óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ; │
- │ Ñß½¿ (πªÑ ¿¼ÑÑΓß∩ «í½áßΓ∞ ¬«¼á¡ñ, áßß«µ¿¿α«óá¡¡á∩ ß ¿¡- │
- │ ñѬ߫¼ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á) │
- │ { │
- │ /* «í½áßΓ∞ ¬«¼á¡ñ πªÑ ßπΘÑßΓóπÑΓ ... »«ñ¬½ετ¿Γ∞ß∩ ¬ │
- │ ¡Ñ⌐ */ │
- │ ºáí½«¬¿α«óáΓ∞ «í½áßΓ∞; │
- │ óδ»«½¡¿Γ∞ »«¬á (ß«ñÑন¼«Ñ «í½áßΓ¿ ÑΘÑ ¡Ñ ñ«ßΓπ»¡«) │
- │ { │
- │ /* «»Ñαᵿ¿ ¡áñ ßτÑΓτ¿¬«¼ ßß佫¬, »αÑñ«σαá¡∩εΘ¿Ñ │
- │ «Γ ú½«íá½∞¡«ú« πñá½Ñ¡¿∩ «í½áßΓ¿ │
- │ */ │
- │ πóѽ¿τ¿Γ∞ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á «í½áßΓ∞; │
- │ ß¡∩Γ∞ ß «í½áßΓ¿ í½«¬¿α«ó¬π; │
- │ »α¿«ßΓá¡«ó¿Γ∞ß∩ (»«¬á ß«ñÑন¼«Ñ «í½áßΓ¿ ¡Ñ ßΓá¡ÑΓ│
- │ ñ«ßΓπ»¡δ¼); │
- │ ºáí½«¬¿α«óáΓ∞ «í½áßΓ∞; │
- │ π¼Ñ¡∞Φ¿Γ∞ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á «í½áßΓ∞; │
- │ } │
- │ »α¿ß«Ññ¿¡¿Γ∞ «í½áßΓ∞ ¬ »α«µÑßßπ (á½ú«α¿Γ¼ attachreg);│
- │ ß¡∩Γ∞ ß «í½áßΓ¿ í½«¬¿α«ó¬π; │
- │ óÑα¡πΓ∞ π»αáó½Ñ¡¿Ñ; │
- │ } │
- │ /* ¿¡ΓÑαÑßπεΘá∩ ¡áß «í½áßΓ∞ ¬«¼á¡ñ ¡Ñ ßπΘÑßΓóπÑΓ -- ß«º- │
- │ ñáΓ∞ ¡«óπε */ │
- │ óδñѽ¿Γ∞ «í½áßΓ∞ ¬«¼á¡ñ (á½ú«α¿Γ¼ allocreg); /* «í½áßΓ∞ │
- │ ºáí½«¬¿- │
- │ α«óá¡á */│
- │ Ñß½¿ («í½áßΓ∞ »«¼ÑτÑ¡á ¬á¬ "¡Ñ«ΓΩѼ½Ñ¼á∩") │
- │ «Γ¬½ετ¿Γ∞ ß««ΓóÑΓßΓóπεΘ¿⌐ Σ½áú; │
- │ »«ñ¬½ετ¿Γ∞ «í½áßΓ∞ ¬ ó¿αΓπá½∞¡«¼π áñαÑßπ, π¬áºá¡¡«¼π ó │
- │ ºáú«½«ó¬Ñ Σá⌐½á (á½ú«α¿Γ¼ attachreg); │
- │ Ñß½¿ (Σá⌐½ ¿¼ÑÑΓ ß»Ñµ¿á½∞¡δ⌐ Σ«α¼áΓ ñ½∩ ß¿ßΓѼδ ß ºá¼ÑΘÑ-│
- │ ¡¿Ñ¼ ßΓαá¡¿µ) │
- │ /* φΓ«Γ ß½πτá⌐ íπñÑΓ αáßß¼«ΓαÑ¡ ó ú½áóÑ 9 */ │
- │ ó »α«Γ¿ó¡«¼ ß½πτáÑ /* Σá⌐½ ¡Ñ ¿¼ÑÑΓ ß»Ñµ¿á½∞¡«ú« Σ«α-│
- │ ¼áΓá */ │
- │ ßτ¿ΓáΓ∞ ¬«¼á¡ñδ ¿º Σá⌐½á ó «í½áßΓ∞ (á½ú«α¿Γ¼ │
- │ loadreg); │
- │ ¿º¼Ñ¡¿Γ∞ αѪ¿¼ ºáΘ¿Γδ «í½áßΓ¿ ó ºá»¿ß¿ τáßΓ¡«⌐ Γáí½¿µδ │
- │ «í½áßΓÑ⌐ »α«µÑßßá ¡á "read-only"; │
- │ ß¡∩Γ∞ ß «í½áßΓ¿ í½«¬¿α«ó¬π; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.23. ǽú«α¿Γ¼ óδñѽѡ¿∩ «í½áßΓÑ⌐ ¬«¼á¡ñ
-
-
- Σá⌐½, ßó∩ºá¡¡δ⌐ ß «í½áßΓ∞ε. àß½¿ íδ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ßΓὫ αáó¡δ¼ 0,
-
- 210
-
- ∩ñα« ¼«ú½« íδ »ÑαÑñáΓ∞ ¬«»¿ε ¿¡ñѬßá ó »á¼∩Γ¿ ñαπú«¼π Σá⌐½π, ΓѼ ßá¼δ¼ ñѽá∩
- ß«¼¡¿Γѽ∞¡δ¼ º¡áτÑ¡¿Ñ π¬áºáΓѽ∩ ¡á ¿¡ñÑ¬ß ó ºá»¿ß¿ Γáí½¿µδ «í½áßΓÑ⌐: Ñß½¿ íδ
- »«½∞º«óáΓÑ½ε »α¿Φ½«ß∞ ¿ß»«½¡¿Γ∞ ¡«óδ⌐ Σá⌐½, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε exec, ∩ñα« »«
- «Φ¿í¬Ñ ßó∩ºá½« íδ Ñú« ß «í½áßΓ∞ε ¬«¼á¡ñ ßΓáα«ú« Σá⌐½á. ¥Γá »α«í½Ñ¼á πßΓαá¡∩-
- ÑΓß∩ í½áú«ñáα∩ Γ«¼π, τΓ« ∩ñα« »α¿ óδ»«½¡Ñ¡¿¿ á½ú«α¿Γ¼á allocreg πóѽ¿τ¿óáÑΓ
- º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡ñѬß, »αÑñπ»αѪñá∩ ΓѼ ßá¼δ¼ »ÑαѡạáτÑ¡¿Ñ
- ¿¡ñѬßá ó »á¼∩Γ¿ ñαπú«¼π Σá⌐½π. è«úñá »α«µÑßß ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐
- exit ¿½¿ exec «Γß«Ññ¿¡∩ÑΓ «í½áßΓ∞ ¬«¼á¡ñ, ∩ñα« π¼Ñ¡∞ΦáÑΓ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á
- ßß佫¬ ¡á ¿¡ñÑ¬ß (»« á½ú«α¿Γ¼π freereg), Ñß½¿ Γ«½∞¬« ßó∩º∞ ¿¡ñѬßá ß «í-
- ½áßΓ∞ε ¡Ñ »«¼ÑτÑ¡á ¬á¬ "¡Ñ«ΓΩѼ½Ñ¼á∩".
-
- Æáí½¿µá ¿¡ñѬ߫ó Æáí½¿µá «í½áßΓÑ⌐
- ┌────────────────┐ τΓ« ¼«ú½« íδ »α«¿- ┌────────────────┐
- │ ∙ │ º«⌐Γ¿, Ñß½¿ íδ ßτÑΓ- │ ∙ │
- │ ∙ │ τ¿¬ ßß佫¬ ¡á ¿¡ñÑ¬ß │ ∙ │
- │ ∙ │ Σá⌐½á /bin/date íδ½ │ ∙ │
- │ ∙ │ αáóÑ¡ 0 ├────────────────┤
- │ ∙ │ │ «í½áßΓ∞ ¬«¼á¡ñ │
- │ ∙ │ ∙─ ─ ─ ─ ─ ─│─ ñ½∩ Σá⌐½á │
- │ ∙ │ │ │ /bin/who │
- ├────────────────┤ ∙ ├────────────────┤
- │ ¬«»¿∩ ¿¡ñѬßá ─│─ ─ ─ ─ ─ ─┘ │ ∙ │
- │ Σá⌐½á /bin/date│ │ ∙ │
- │ ó »á¼∩Γ¿ <┼───────────┐ │ ∙ │
- ├────────────────┤ │ ├────────────────┤
- │ ∙ │ │ │ «í½áßΓ∞ ¬«¼á¡ñ │
- │ ∙ │ └───────────┼─ ñ½∩ Σá⌐½á │
- │ ∙ │ π¬áºáΓѽ∞ ¡á│ /bin/date │
- │ ∙ │ ¬«»¿ε ¿¡ñѬ-├────────────────┤
- │ ∙ │ ßá ó »á¼∩Γ¿ │ ∙ │
- │ ∙ │ │ ∙ │
- └────────────────┘ └────────────────┘
-
- É¿ßπ¡«¬ 7.24. éºá¿¼«ßó∩º∞ ¼Ñªñπ Γáí½¿µÑ⌐ ¿¡ñÑ¬ß«ó ¿ Γáí½¿µÑ⌐
- «í½áßΓÑ⌐ ó ß½πτáÑ ß«ó¼ÑßΓ¡«ú« ¿ß»«½∞º«óá¡¿∩
- »α«µÑßßἿ «ñ¡«⌐ «í½áßΓ¿ ¬«¼á¡ñ
-
- Éáßß¼«Γα¿¼ ó ¬áτÑßΓóÑ »α¿¼Ñαá ß¿Γπᵿε, »α¿óÑñÑ¡¡πε ¡á É¿ßπ¡¬Ñ 7.21, úñÑ
- »«¬áºá¡á óºá¿¼«ßó∩º∞ ¼Ñªñπ ßΓαπ¬ΓπαἿ ñá¡¡δσ ó »α«µÑßßÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿
- exec »« «Γ¡«ΦÑ¡¿ε ¬ Σá⌐½π "/bin/date" »α¿ πß½«ó¿¿ αáß»«½«ªÑ¡¿∩ ¬«¼á¡ñ ¿ ñá¡-
- ¡δσ Σá⌐½á ó αạδσ «í½áßΓ∩σ. è«úñá »α«µÑßß ¿ß»«½¡∩ÑΓ Σá⌐½ "/bin/date" »Ñαóδ⌐
- αáº, ∩ñα« ¡áº¡áτáÑΓ ñ½∩ ¬«¼á¡ñ Σá⌐½á Γ«τ¬π óσ«ñá ó Γáí½¿µÑ «í½áßΓÑ⌐ (É¿ßπ¡«¬
- 7.24) ¿ »« ºáóÑαΦÑ¡¿¿ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec «ßΓáó½∩ÑΓ ßτÑΓτ¿¬ ßß佫¬ ¡á
- ¿¡ñÑ¬ß αáó¡δ¼ 1. è«úñá Σá⌐½ "/bin/date" ºáóÑαΦáÑΓß∩, ∩ñα« ºá»π߬áÑΓ á½ú«α¿Γ-
- ¼δ detachreg ¿ freereg, ßíαáßδóá∩ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ó 0. Äñ¡á¬«, Ñß½¿
- ∩ñα« ó »Ñαó«¼ ß½πτáÑ ¡Ñ πóѽ¿τ¿½« º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á, «¡« »« ºáóÑαΦÑ¡¿¿ Σπ¡¬-
- µ¿¿ exec «ßΓá¡ÑΓß∩ αáó¡δ¼ 0 ¿ ¿¡ñÑ¬ß ¡á óßѼ »α«Γ∩ªÑ¡¿¿ óδ»«½¡Ñ¡¿∩ »α«µÑßßá
- íπñÑΓ ¡áσ«ñ¿Γ∞ß∩ ó ß»¿ß¬Ñ ßó«í«ñ¡δσ ¿¡ñѬ߫ó. ÅαÑñ»«½«ª¿¼, τΓ« ó φΓ« óαѼ∩
- ßó«í«ñ¡δ⌐ ¿¡ñÑ¬ß »«¡áñ«í¿½ß∩ »α«µÑßßπ, ºá»πßΓ¿óΦѼπ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec
- Σá⌐½ "/bin/who", Γ«úñá ∩ñα« ¼«ªÑΓ óδñѽ¿Γ∞ φΓ«¼π »α«µÑßßπ ¿¡ñѬß, αá¡ÑÑ »α¿-
- ¡áñ½ÑªáóΦ¿⌐ Σá⌐½π "/ bin/date". Åα«ß¼áΓα¿óá∩ Γáí½¿µπ «í½áßΓÑ⌐ ó »«¿ß¬áσ ¿¡-
- ñѬßá Σá⌐½á "/bin/who", ∩ñα« ó¼ÑßΓ« ¡Ñú« óδíαὫ íδ ¿¡ñÑ¬ß Σá⌐½á
- "/bin/date". æτ¿Γá∩, τΓ« «í½áßΓ∞ ß«ñÑαª¿Γ ¬«¼á¡ñδ Σá⌐½á "/bin/who", ∩ñα« ¿ß-
- »«½¡¿½« íδ ß«óßѼ ¡Ñ Γπ »α«úαá¼¼π. Å«φΓ«¼π º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡-
- ñÑ¬ß á¬Γ¿ó¡«ú« Σá⌐½á, ßó∩ºá¡¡«ú« ß αáºñѽ∩Ѽ«⌐ «í½áßΓ∞ε ¬«¼á¡ñ, ñ«½ª¡« íδΓ∞
- ¡Ñ ¼Ñ¡∞ΦÑ Ññ¿¡¿µδ, τΓ«íδ ∩ñα« ¡Ñ ¼«ú½« »Ñαѡạáτ¿Γ∞ ¿¡ñÑ¬ß ñαπú«¼π Σá⌐½π.
- 髺¼«ª¡«ßΓ∞ ß«ó¼ÑßΓ¡«ú« ¿ß»«½∞º«óá¡¿∩ αẽ¿τ¡δ¼¿ »α«µÑßßἿ «ñ¡¿σ ¿ ΓÑσ
- ªÑ «í½áßΓÑ⌐ ¬«¼á¡ñ »«ºó«½∩ÑΓ φ¬«¡«¼¿Γ∞ óαѼ∩, ºáΓαáτ¿óáѼ«Ñ ¡á ºá»π߬ »α«ú-
- αá¼¼δ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec. Çñ¼¿¡¿ßΓαáΓ«αδ ß¿ßΓÑ¼δ ¼«úπΓ ß »«¼«Θ∞ε ß¿ßΓѼ-
-
- 211
-
- ¡«⌐ Σπ¡¬µ¿¿ (¿ ¬«¼á¡ñδ) chmod πßΓá¡áó½¿óáΓ∞ ñ½∩ τáßΓ« ¿ß»«½¡∩Ѽδσ Σá⌐½«ó αÑ-
- ª¿¼ "sticky-bit", ßπΘ¡«ßΓ∞ ¬«Γ«α«ú« ºá¬½ετáÑΓß∩ ó ß½ÑñπεΘѼ. è«úñá »α«µÑßß
- ¿ß»«½¡∩ÑΓ Σá⌐½, ñ½∩ ¬«Γ«α«ú« πßΓá¡«ó½Ñ¡ αѪ¿¼ "sticky-bit", ∩ñα« ¡Ñ «ßó«í«ª-
- ñáÑΓ «í½áßΓ∞ »á¼∩Γ¿, «ΓóÑñÑ¡¡πε »«ñ ¬«¼á¡ñδ Σá⌐½á, «Γß«Ññ¿¡∩∩ «í½áßΓ∞ «Γ
- »α«µÑßßá ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿⌐ exit ¿½¿ exec, ñáªÑ Ñß½¿ º¡áτÑ¡¿Ñ ßτÑΓ-
- τ¿¬á ßß佫¬ ¡á ¿¡ñÑ¬ß ßΓá¡«ó¿Γß∩ αáó¡δ¼ 0. ƒñα« «ßΓáó½∩ÑΓ «í½áßΓ∞ ¬«¼á¡ñ ó
- »Ñαó«¡áτá½∞¡«¼ ó¿ñÑ, »α¿ φΓ«¼ º¡áτÑ¡¿Ñ ßτÑΓτ¿¬á ßß佫¬ ¡á ¿¡ñÑ¬ß αáó¡« 1,
- »πßΓ∞ ñáªÑ «í½áßΓ∞ ¡Ñ »«ñ¬½ετÑ¡á í«½∞ΦÑ ¡¿ ¬ «ñ¡«¼π ¿º »α«µÑßß«ó. àß½¿ ªÑ
- Σá⌐½ íπñÑΓ ÑΘÑ αẠºá»πΘÑ¡ ¡á óδ»«½¡Ñ¡¿Ñ (πªÑ ñαπú¿¼ »α«µÑßß«¼), ∩ñα« ó Γáí-
- ½¿µÑ «í½áßΓÑ⌐ «í¡áαπª¿Γ ºá»¿ß∞, ß««ΓóÑΓßΓóπεΘπε «í½áßΓ¿ ß ¬«¼á¡ñἿ Σá⌐½á.
- Åα«µÑßß ºáΓαáΓ¿Γ ¡á ºá»π߬ Σá⌐½á ¼Ñ¡∞ΦÑ óαѼѡ¿, Γᬠ¬á¬ Ѽπ ¡Ñ »α¿ñÑΓß∩ τ¿-
- ΓáΓ∞ ¬«¼á¡ñδ ¿º Σá⌐½«ó«⌐ ß¿ßΓѼδ. àß½¿ ¬«¼á¡ñδ Σá⌐½á óßÑ ÑΘÑ ¡áσ«ñ∩Γß∩ ó »á-
- ¼∩Γ¿, ó ¿σ »ÑαѼÑΘÑ¡¿¿ ¡Ñ íπñÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿; Ñß½¿ ªÑ ¬«¼á¡ñδ óδúαπªÑ¡δ ó«
- ó¡ÑΦ¡εε »á¼∩Γ∞, íπñÑΓ ú«αáºñ« íδßΓαÑÑ ºáúαπº¿Γ∞ ¿σ ¿º ó¡ÑΦ¡Ñ⌐ »á¼∩Γ¿, τѼ ¿º
- Σá⌐½«ó«⌐ ß¿ßΓѼδ (ß¼. «í φΓ«¼ ó ú½áóÑ 9).
- ƒñα« πñá½∩ÑΓ ¿º Γáí½¿µδ «í½áßΓÑ⌐ ºá»¿ß¿, ß««ΓóÑΓßΓóπεΘ¿Ñ «í½áßΓ∩¼ ß ¬«-
- ¼á¡ñἿ Σá⌐½á, ñ½∩ ¬«Γ«α«ú« πßΓá¡«ó½Ñ¡ αѪ¿¼ "sticky-bit" (¿¡δ¼¿ ß½«óἿ,
- ¬«úñá «í½áßΓ∞ »«¼ÑτÑ¡á ¬á¬ "¡Ñ«ΓΩѼ½Ñ¼á∩" τáßΓ∞ Σá⌐½á ¿½¿ »α«µÑßßá), ó ß½Ñ-
- ñπεΘ¿σ ß½πτá∩σ:
- 1. àß½¿ »α«µÑßß «Γ¬αδ½ Σá⌐½ ñ½∩ ºá»¿ß¿, ó αѺπ½∞ΓáΓÑ ß««ΓóÑΓßΓóπεΘ¿σ «»Ñαá-
- µ¿⌐ ß«ñÑন¼«Ñ Σá⌐½á ¿º¼Ñ¡¿Γß∩, »α¿ φΓ«¼ íπñÑΓ ºáΓα«¡πΓ« ¿ ß«ñÑন¼«Ñ
- «í½áßΓ¿.
- 2. àß½¿ »α«µÑßß ¿º¼Ñ¡¿½ »αáóá ñ«ßΓπ»á ¬ Σá⌐½π (chmod), «Γ¼Ñ¡¿ó αѪ¿¼
- "sticky-bit", Σá⌐½ ¡Ñ ñ«½ªÑ¡ «ßΓáóáΓ∞ß∩ ó Γáí½¿µÑ «í½áßΓÑ⌐.
- 3. àß½¿ »α«µÑßß αẫαóá½ ßó∩º∞ ß Σá⌐½«¼ (unlink), «¡ ¡Ñ ß¼«ªÑΓ í«½∞ΦÑ ¿ß-
- »«½¡∩Γ∞ φëà Σá⌐½, »«ß¬«½∞¬π π Σá⌐½á ¡Ñ íπñÑΓ Γ«τ¬¿ óσ«ñá ó Σá⌐½«óπε
- ß¿ßΓѼπ; ß½Ññ«óáΓѽ∞¡«, ¿ óßÑ «ßΓá½∞¡δÑ »α«µÑßßδ ¡Ñ íπñπΓ ¿¼ÑΓ∞ ñ«ßΓπ»á
- ¬ ºá»¿ß¿ ó Γáí½¿µÑ «í½áßΓÑ⌐, ß««ΓóÑΓßΓóπεΘÑ⌐ Σá⌐½π. ū߬«½∞¬π «í½áßΓ∞ ß
- ¬«¼á¡ñἿ Σá⌐½á í«½∞ΦÑ ¡Ñ ¿ß»«½∞ºπÑΓß∩, ∩ñα« ¼«ªÑΓ «ßó«í«ñ¿Γ∞ ÑÑ ó¼ÑßΓÑ
- ß «ßΓá½∞¡δ¼¿ αÑßπαßἿ, ºá¡¿¼áÑ¼δ¼¿ Σá⌐½«¼.
- 4. àß½¿ »α«µÑßß ñѼ«¡Γ¿απÑΓ Σá⌐½«óπε ß¿ßΓѼπ, Σá⌐½ »ÑαÑßΓáÑΓ íδΓ∞ ñ«ßΓπ»¡δ¼
- ¿ ¡¿ «ñ¿¡ ¿º »α«µÑßß«ó ¡Ñ ¼«ªÑΓ Ñú« ¿ß»«½¡¿Γ∞. é «ßΓá½∞¡«¼ - óßÑ ¬á¬ ó
- »αÑñδñπΘѼ ß½πτáÑ.
- 5. àß½¿ ∩ñα« ¿ß»«½∞º«óὫ πªÑ óßÑ »α«ßΓαá¡ßΓó« ó¡ÑΦ¡Ñ⌐ »á¼∩Γ¿, «ΓóÑñÑ¡¡«Ñ
- »«ñ óδúαπº¬π ºáñáτ, «¡« »δΓáÑΓß∩ «ßó«í«ñ¿Γ∞ τáßΓ∞ »á¼∩Γ¿ ºá ßτÑΓ «í½áß-
- ΓÑ⌐, ¿¼ÑεΘ¿σ »«¼ÑΓ¬π "sticky-bit", ¡« ¡Ñ ¿ß»«½∞ºπѼδσ ó ¡áßΓ«∩Θ¿⌐ ¼«-
- ¼Ñ¡Γ. ìÑß¼«Γα∩ ¡á Γ«, τΓ« φΓ¿ «í½áßΓ¿ ¼«úπΓ ó߬«αÑ »«¡áñ«í¿Γ∞ß∩ ñαπú¿¼
- »α«µÑßßá¼, »«ΓαÑí¡«ßΓ¿ ∩ñαá ∩ó½∩εΓß∩ í«½ÑÑ ßα«τ¡δ¼¿.
-
- é »Ñαóδσ ñóπσ ß½πτá∩σ «í½áßΓ∞ ¬«¼á¡ñ ß »«¼ÑΓ¬«⌐ "sticky-bit" ñ«½ª¡á íδΓ∞
- «ßó«í«ªñÑ¡á, »«ß¬«½∞¬π «¡á í«½∞ΦÑ ¡Ñ «ΓαáªáÑΓ ΓѬπΘÑÑ ß«ßΓ«∩¡¿Ñ Σá⌐½á. é «ß-
- Γá½∞¡δσ ß½πτá∩σ φΓ« ñѽáÑΓß∩ ¿º »αá¬Γ¿τÑ߬¿σ ß««íαáªÑ¡¿⌐. è«¡Ñτ¡« ªÑ ∩ñα«
- «ßó«í«ªñáÑΓ «í½áßΓ∞ Γ«½∞¬« »α¿ Γ«¼ πß½«ó¿¿, τΓ« «¡á ¡Ñ ¿ß»«½∞ºπÑΓß∩ ¡¿ «ñ¡¿¼
- ¿º óδ»«½¡∩εΘ¿σß∩ »α«µÑßß«ó (ßτÑΓτ¿¬ ßß佫¬ ¡á ¡ÑÑ ¿¼ÑÑΓ ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ); ó
- »α«Γ¿ó¡«¼ ß½πτáÑ φΓ« »α¿óѽ« íδ ¬ áóáα¿⌐¡«¼π ºáóÑαΦÑ¡¿ε óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡δσ
- Σπ¡¬µ¿⌐ open, unlink ¿ umount (ß½πτá¿ 1, 3 ¿ 4, ß««ΓóÑΓßΓóÑ¡¡«).
- àß½¿ »α«µÑßß ºá»π߬áÑΓ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec ßἫú« ßÑí∩, á½ú«α¿Γ¼ óδ-
- »«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ¡Ñ߬«½∞¬« πß½«ª¡∩ÑΓß∩. Å« ¬«¼á¡ñÑ
-
- sh script
-
- ¬«¼á¡ñ¡δ⌐ »α«µÑßß«α shell »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß (¡«óπε óÑΓó∞), ¬«Γ«αδ⌐
- ¿¡¿µ¿¿απÑΓ ºá»π߬ shell'á (ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec) ¿ ¿ß»«½¡∩ÑΓ ¬«¼á¡ñδ Σá⌐½á
- "script". àß½¿ »α«µÑßß ºá»π߬áÑΓ ßἫú« ßÑí∩ ¿ »α¿ φΓ«¼ Ñú« «í½áßΓ∞ ¬«¼á¡ñ
- ñ«»π߬áÑΓ ß«ó¼ÑßΓ¡«Ñ ¿ß»«½∞º«óá¡¿Ñ, ∩ñαπ »α¿ñÑΓß∩ ß½Ññ¿Γ∞ ºá ΓѼ, τΓ«íδ »α¿
- «íαáΘÑ¡¿¿ óÑΓóÑ⌐ »α«µÑßßá ¬ ¿¡ñѬßá¼ ¿ «í½áßΓ∩¼ ¡Ñ 󫺡¿¬á½¿ óºá¿¼¡δÑ í½«¬¿-
- α«ó¬¿. ê¡áτÑ ú«ó«α∩, ∩ñα« ¡Ñ ¼«ªÑΓ, ¡Ñ ß¡¿¼á∩ í½«¬¿α«ó¬¿ ß« "ßΓáα«⌐" «í½áßΓ¿
- ¬«¼á¡ñ, »«»δΓáΓ∞ß∩ ºáí½«¬¿α«óáΓ∞ "¡«óπε" «í½áßΓ∞, »«ß¬«½∞¬π ¡á ßἫ¼ ñѽÑ
- φΓ« «ñ¡á ¿ Γá ªÑ «í½áßΓ∞. é¼ÑßΓ« φΓ«ú« ∩ñα« »α«ßΓ« «ßΓáó½∩ÑΓ "ßΓáαπε" «í-
-
- 212
-
- ½áßΓ∞ ¬«¼á¡ñ »α¿ß«Ññ¿¡Ñ¡¡«⌐ ¬ »α«µÑßßπ, Γᬠ¬á¬ ó ½εí«¼ ß½πτáÑ Ñ⌐ »αÑñßΓ«¿Γ
- »«óΓ«α¡«Ñ ¿ß»«½∞º«óá¡¿Ñ.
- Äíδτ¡« »α«µÑßßδ óδºδóáεΓ Σπ¡¬µ¿ε exec »«ß½Ñ Σπ¡¬µ¿¿ fork; Γᬿ¼ «íαẫ¼,
- ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ fork »α«µÑßß-»«Γ«¼«¬ ¬«»¿απÑΓ áñαÑß¡«Ñ »α«ßΓαá¡-
- ßΓó« ßó«Ñú« α«ñ¿Γѽ∩, ¡« ßíαáßδóáÑΓ Ñú« ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ exec ¿
- »« ßαáó¡Ñ¡¿ε ß α«ñ¿ΓѽѼ ¿ß»«½¡∩ÑΓ «íαẠπªÑ ñαπú«⌐ »α«úαá¼¼δ. ìÑ í佫 íδ
- í«½ÑÑ ÑßΓÑßΓóÑ¡¡δ¼ «íΩÑñ¿¡¿Γ∞ ñóÑ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ ó «ñ¡π, ¬«Γ«αá∩ íδ ºáú-
- απªá½á »α«úαá¼¼π ¿ ¿ß»«½¡∩½á ÑÑ »«ñ ó¿ñ«¼ ¡«ó«ú« »α«µÑßßá ? É¿τ¿ óδ߬áºá½
- »αÑñ»«½«ªÑ¡¿Ñ, τΓ« 󫺡¿¬¡«óÑ¡¿Ñ fork ¿ exec ¬á¬ «Γñѽ∞¡δσ ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐
- «í∩ºá¡« Γ«¼π, τΓ« »α¿ ß«ºñá¡¿¿ ß¿ßΓѼδ UNIX Σπ¡¬µ¿∩ fork íδ½á ñ«íáó½Ñ¡á ¬
- πªÑ ßπΘÑßΓóπεΘѼπ «íαáºπ ∩ñαá ß¿ßΓѼδ (ß¼. [Ritchie 84a], ßΓα.1584). Äñ¡á¬«,
- αáºñѽѡ¿Ñ fork ¿ exec ó᪡« ¿ ß Σπ¡¬µ¿«¡á½∞¡«⌐ Γ«τ¬¿ ºαÑ¡¿∩, »«ß¬«½∞¬π ó
- φΓ«¼ ß½πτáÑ »α«µÑßßδ ¼«úπΓ αáí«ΓáΓ∞ ß ñÑß¬α¿»Γ«αἿ Σá⌐½«ó ßΓá¡ñáαΓ¡«ú« óó«-
- ñá-óδó«ñá ¡Ñºáó¿ß¿¼«, »«óδΦá∩ ΓѼ ßá¼δ¼ "φ½Ñúá¡Γ¡«ßΓ∞" ¿ß»«½∞º«óá¡¿∩ ¬á¡á-
- ½«ó. Åα¿¼Ñα, »«¬áºδóáεΘ¿⌐ ¿ß»«½∞º«óá¡¿Ñ φΓ«⌐ 󫺼«ª¡«ßΓ¿, »α¿ó«ñ¿Γß∩ ó αáº-
- ñÑ½Ñ 7.8.
-
-
- E7.6 èÄä êäàìÆêöêèÇûêê ÅÄï£çÄéÇÆàïƒ ÅÉÄûàææÇF
-
- ƒñα« ßó∩ºδóáÑΓ ß »α«µÑßß«¼ ñóá ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩, ¡Ñ ºáó¿-
- ß∩Θ¿σ «Γ ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »α«µÑßßá: αÑá½∞¡δ⌐ (ñÑ⌐ßΓó¿Γѽ∞¡δ⌐) ¬«ñ ¿ñÑ¡Γ¿-
- Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ ¿ ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñ ¿½¿ setuid («Γ "set user ID" - πß-
- Γá¡«ó¿Γ∞ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩, »«ñ ¬«Γ«αδ¼ »α«µÑßß íπñÑΓ ¿ß»«½-
- ¡∩Γ∞ß∩). ÉÑá½∞¡δ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿µ¿απÑΓ »«½∞º«óáΓѽ∩, ¡ÑßπΘÑú« «ΓóÑΓßΓóÑ¡¡«ßΓ∞
- ºá óδ»«½¡∩εΘ¿⌐ß∩ »α«µÑßß. êß»«½¡¿Γѽ∞¡δ⌐ ¬«ñ ¿ß»«½∞ºπÑΓß∩ ñ½∩ πßΓá¡«ó¬¿ »αáó
- ß«íßΓóÑ¡¡«ßΓ¿ ¡á ó¡«ó∞ ß«ºñáóáѼδÑ Σá⌐½δ, ñ½∩ »α«óÑન »αáó ñ«ßΓπ»á ¬ Σá⌐½π
- ¿ αáºαÑΦÑ¡¿∩ ¡á »«ß佬π ß¿ú¡á½«ó »α«µÑßßá¼ τÑαѺ Σπ¡¬µ¿ε kill. Åα«µÑßßδ ¼«-
- úπΓ ¿º¼Ñ¡∩Γ∞ ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñ, ºá»π߬á∩ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec »α«úαá¼¼π
- setuid ¿½¿ ºá»π߬á∩ Σπ¡¬µ¿ε setuid ó ∩ó¡«¼ ó¿ñÑ.
- Åα«úαá¼¼á setuid »αÑñßΓáó½∩ÑΓ ß«í«⌐ ¿ß»«½¡∩Ѽδ⌐ Σá⌐½, ¿¼ÑεΘ¿⌐ ó »«½Ñ αÑ-
- ª¿¼á ñ«ßΓπ»á πßΓá¡«ó½Ñ¡¡δ⌐ í¿Γ setuid. è«úñá »α«µÑßß ºá»π߬áÑΓ »α«úαá¼¼π
- setuid ¡á óδ»«½¡Ñ¡¿Ñ, ∩ñα« ºá»¿ßδóáÑΓ ó »«½∩, ß«ñÑαªáΘ¿Ñ αÑá½∞¡δÑ ¬«ñδ ¿ñÑ¡-
- Γ¿Σ¿¬áµ¿¿, ó Γáí½¿µÑ »α«µÑßß«ó ¿ ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿
- ó½áñѽ∞µá Σá⌐½á. ùΓ«íδ ¬á¬-Γ« αẽ¿τáΓ∞ φΓ¿ »«½∩, ¡áº«óѼ «ñ¡« ¿º ¡¿σ, ¬«Γ«-
- α«Ñ σαá¡¿Γß∩ ó Γáí½¿µÑ »α«µÑßß«ó, ß«σαá¡Ñ¡¡δ¼ ¬«ñ«¼ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óá-
- Γѽ∩. Éáßß¼«Γα¿¼ »α¿¼Ñα, ¿½½εßΓα¿απεΘ¿⌐ αạ¿µπ ó ß«ñÑন¼«¼ φΓ¿σ »«½Ñ⌐.
- æ¿¡Γá¬ß¿ß ó맮óá ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ setuid:
- setuid(uid)
- úñÑ uid - ¡«óδ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩. ÉѺπ½∞ΓáΓ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿
- ºáó¿ß¿Γ «Γ ΓѬπΘÑú« º¡áτÑ¡¿∩ αÑá½∞¡«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿. àß½¿ αÑá½∞¡δ⌐ ¬«ñ
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ »α«µÑßßá, óδºδóáεΘÑú« Σπ¡¬µ¿ε, π¬áºδóáÑΓ ¡á ßπ-
- »Ñα»«½∞º«óáΓѽ∩, ∩ñα« ºá»¿ßδóáÑΓ º¡áτÑ¡¿Ñ uid ó »«½∩, σαá¡∩Θ¿Ñ αÑá½∞¡δ⌐ ¿
- ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿, ó Γáí½¿µÑ »α«µÑßß«ó ¿ ó »α«ßΓαá¡ßΓóÑ »α«-
- µÑßßá. àß½¿ φΓ« ¡Ñ Γá¬, ∩ñα« ºá»¿ßδóáÑΓ uid ó ¬áτÑßΓóÑ º¡áτÑ¡¿∩ ¿ß»«½¡¿Γѽ∞-
- ¡«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ó »α«ßΓαá¡ßΓóÑ »α«µÑßßá ¿ Γ« Γ«½∞¬« ó Γ«¼ ß½πτáÑ,
- Ñß½¿ º¡áτÑ¡¿Ñ uid αáó¡« º¡áτÑ¡¿ε αÑá½∞¡«ú« ¬«ñá ¿½¿ º¡áτÑ¡¿ε ß«σαá¡Ñ¡¡«ú«
- ¬«ñá. é »α«Γ¿ó¡«¼ ß½πτáÑ Σπ¡¬µ¿∩ ó«ºóαáΘáÑΓ óδºδóáεΘѼπ »α«µÑßßπ «Φ¿í¬π.
- Åα«µÑßß ¡áß½ÑñπÑΓ αÑá½∞¡δ⌐ ¿ ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ π ßó«Ñú« α«-
- ñ¿Γѽ∩ (ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ fork) ¿ ß«σαá¡∩ÑΓ ¿σ º¡áτÑ¡¿∩ »«ß½Ñ
- ó맮óá Σπ¡¬µ¿¿ exec.
- ìá É¿ßπ¡¬Ñ 7.25 »α¿óÑñÑ¡á »α«úαá¼¼á, ñѼ«¡ßΓα¿απεΘá∩ ¿ß»«½∞º«óá¡¿Ñ Σπ¡¬-
- µ¿¿ setuid. ÅαÑñ»«½«ª¿¼, τΓ« ¿ß»«½¡∩Ѽδ⌐ Σá⌐½, »«½πτÑ¡¡δ⌐ ó αѺπ½∞ΓáΓÑ Γαá¡-
- ß½∩µ¿¿ ¿ßσ«ñ¡«ú« ΓѬßΓá »α«úαá¼¼δ, ¿¼ÑÑΓ ó½áñѽ∞µá ß ¿¼Ñ¡Ñ¼ "maury" (¬«ñ
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ 8319) ¿ πßΓá¡«ó½Ñ¡¡δ⌐ í¿Γ setuid; »αáó« Ñú« ¿ß»«½¡Ñ¡¿∩ »αÑñ«ß-
- Γáó½Ñ¡« óßѼ »«½∞º«óáΓѽ∩¼. ä«»πßΓ¿¼ ΓᬪÑ, τΓ« »«½∞º«óáΓѽ¿ "mjb" (¬«ñ
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ 5088) ¿ "maury" ∩ó½∩εΓß∩ ó½áñѽ∞µá¼¿ Σá⌐½«ó ß ΓѼ¿ ªÑ ¿¼Ñ¡á¼¿,
- ¬áªñδ⌐ ¿º ¬«Γ«αδσ ñ«ßΓπ»Ñ¡ Γ«½∞¬« ñ½∩ τΓÑ¡¿∩ ¿ Γ«½∞¬« ßó«Ñ¼π ó½áñѽ∞µπ. é«
- óαѼ∩ ¿ß»«½¡Ñ¡¿∩ »α«úαá¼¼δ »«½∞º«óáΓѽε "mjb" óδó«ñ¿Γß∩ ß½ÑñπεΘá∩ ¿¡Σ«α¼á-
-
- 213
-
- µ¿∩:
- uid 5088 euid 8319
- fdmjb -1 fdmaury 3
- after setuid(5088): uid 5088 euid 5088
- fdmjb 4 fdmaury -1
- after setuid(8319): uid 5088 euid 8319
- æ¿ßΓѼ¡δÑ Σπ¡¬µ¿¿ getuid ¿ geteuid ó«ºóαáΘáεΓ º¡áτÑ¡¿∩ αÑá½∞¡«ú« ¿ ¿ß»«½¡¿-
- Γѽ∞¡«ú« ¬«ñ«ó ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽÑ⌐ »α«µÑßßá, ñ½∩
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <fcntl.h> │
- │ main() │
- │ { │
- │ int uid,euid,fdmjb,fdmaury; │
- │ │
- │ uid = getuid(); /* »«½πτ¿Γ∞ αÑá½∞¡δ⌐ UID */ │
- │ euid = geteuid(); /* »«½πτ¿Γ∞ ¿ß»«½¡¿Γѽ∞¡δ⌐ UID */│
- │ printf("uid %d euid %d\n",uid,euid); │
- │ │
- │ fdmjb = open("mjb",O_RDONLY); │
- │ fdmaury = open("maury",O_RDONLY); │
- │ printf("fdmjb %d fdmaury %d\n",fdmjb,fdmaury); │
- │ │
- │ setuid(uid); │
- │ printf("after setuid(%d): uid %d euid %d\n",uid, │
- │ getuid(),geteuid()); │
- │ │
- │ fdmjb = open("mjb",O_RDONLY); │
- │ fdmaury = open("maury",O_RDONLY); │
- │ printf("fdmjb %d fdmaury %d\n",fdmjb,fdmaury); │
- │ │
- │ setuid(uid); │
- │ printf("after setuid(%d): uid %d euid %d\n",euid, │
- │ getuid(),geteuid()); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.25. Åα¿¼Ñα óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ setuid
-
- »«½∞º«óáΓѽ∩ "mjb" φΓ«, ß««ΓóÑΓßΓóÑ¡¡«, 5088 ¿ 8319. Å«φΓ«¼π »α«µÑßß ¡Ñ ¼«-
- ªÑΓ «Γ¬αδΓ∞ Σá⌐½ "mjb" (¿í« «¡ ¿¼ÑÑΓ ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞-
- º«óáΓѽ∩ (8319), ¡Ñ αáºαÑΦáεΘ¿⌐ »α«¿ºó«ñ¿Γ∞ τΓÑ¡¿Ñ Σá⌐½á), ¡« ¼«ªÑΓ «Γ¬αδΓ∞
- Σá⌐½ "maury". Å«ß½Ñ ó맮óá Σπ¡¬µ¿¿ setuid, ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ ¬«Γ«α«⌐ ó
- »«½Ñ ¿ß»«½¡¿Γѽ∞¡«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ ("mjb") ºá¡«ß¿Γß∩ º¡á-
- τÑ¡¿Ñ αÑá½∞¡«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿, ¡á »ÑτáΓ∞ óδó«ñ∩Γß∩ º¡áτÑ¡¿∩ ¿ Γ«ú«, ¿
- ñαπú«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ "mjb": «íá αáó¡δ 5088. ÆÑ»Ñα∞ »α«-
- µÑßß ¼«ªÑΓ «Γ¬αδΓ∞ Σá⌐½ "mjb", »«ß¬«½∞¬π «¡ ¿ß»«½¡∩ÑΓß∩ »«ñ ¬«ñ«¼ ¿ñÑ¡Γ¿Σ¿-
- ¬áµ¿¿ »«½∞º«óáΓѽ∩, ¿¼ÑεΘÑú« »αáó« ¡á τΓÑ¡¿Ñ ¿º Σá⌐½á, ¡« ¡Ñ ¼«ªÑΓ «Γ¬αδΓ∞
- Σá⌐½ "maury". ìᬫ¡Ñµ, »«ß½Ñ ºá¡ÑßÑ¡¿∩ ó »«½Ñ ¿ß»«½¡¿Γѽ∞¡«ú« ¬«ñá ¿ñÑ¡Γ¿Σ¿-
- ¬áµ¿¿ º¡áτÑ¡¿∩, ß«σαá¡Ñ¡¡«ú« Σπ¡¬µ¿Ñ⌐ setuid (8319), ¡á »ÑτáΓ∞ ß¡«óá óδó«-
- ñ∩Γß∩ º¡áτÑ¡¿∩ 5088 ¿ 8319. îδ »«¬áºá½¿, Γᬿ¼ «íαẫ¼, ¬á¬ ß »«¼«Θ∞ε »α«ú-
- αá¼¼δ setuid »α«µÑßß ¼«ªÑΓ ¿º¼Ñ¡∩Γ∞ º¡áτÑ¡¿Ñ ¬«ñá ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓÑ-
- ½∩, »«ñ ¬«Γ«αδ¼ «¡ ¿ß»«½¡∩ÑΓß∩.
- é« óαѼ∩ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ »«½∞º«óáΓѽѼ "maury" ¡á »ÑτáΓ∞ óδó«ñ¿Γß∩
- ß½ÑñπεΘá∩ ¿¡Σ«α¼áµ¿∩:
- uid 8319 euid 8319
- fdmjb -1 fdmaury 3
- after setuid(8319): uid 8319 euid 8319
- fdmjb -1 fdmaury 4
-
- 214
-
- after setuid(8319): uid 8319 euid 8319
- ÉÑá½∞¡δ⌐ ¿ ¿ß»«½¡¿Γѽ∞¡δ⌐ ¬«ñδ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ »«½∞º«óáΓѽ∩ ó« óαѼ∩ óδ»«½¡Ñ-
- ¡¿∩ »α«úαá¼¼δ «ßΓáεΓß∩ αáó¡δ 8319: »α«µÑßß ¼«ªÑΓ «Γ¬αδΓ∞ Σá⌐½ "maury", ¡« ¡Ñ
- ¼«ªÑΓ «Γ¬αδΓ∞ Σá⌐½ "mjb". êß»«½¡¿Γѽ∞¡δ⌐ ¬«ñ, σαá¡∩Θ¿⌐ß∩ ó »α«ßΓαá¡ßΓóÑ »α«-
- µÑßßá, ºá¡ÑßÑ¡ Γπñá ó αѺπ½∞ΓáΓÑ »«ß½Ññ¡Ñú« ¿ß»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ¿½¿ »α«úαá¼¼δ
- setuid; Γ«½∞¬« Ñú« º¡áτÑ¡¿Ñ¼ «»αÑñѽ∩εΓß∩ »αáóá ñ«ßΓπ»á »α«µÑßßá ¬ Σá⌐½π. æ
- »«¼«Θ∞ε Σπ¡¬µ¿¿ setuid ¿ß»«½¡¿Γѽ∞¡«¼π ¬«ñπ ¼«ªÑΓ íδΓ∞ »α¿ßó«Ñ¡« º¡áτÑ¡¿Ñ
- ß«σαá¡Ñ¡¡«ú« ¬«ñá (¿º Γáí½¿µδ »α«µÑßß«ó), Γ.Ñ. Γ« º¡áτÑ¡¿Ñ, ¬«Γ«α«Ñ ¿ß»«½¡¿-
- Γѽ∞¡δ⌐ ¬«ñ ¿¼Ñ½ ó ßἫ¼ ¡áτá½Ñ.
- Åα¿¼Ñα«¼ »α«úαá¼¼δ, ¿ß»«½∞ºπεΘÑ⌐ ó맮ó ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ setuid, ¼«ªÑΓ
- ß½πª¿Γ∞ »α«úαá¼¼á αÑú¿ßΓαᵿ¿ »«½∞º«óáΓѽÑ⌐ ó ß¿ßΓÑ¼Ñ (login). Åáαá¼ÑΓα«¼
- Σπ¡¬µ¿¿ setuid »α¿ φΓ«¼ ∩ó½∩ÑΓß∩ ¬«ñ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ßπ»Ñα»«½∞º«óáΓѽ∩, Γᬿ¼
- «íαẫ¼, »α«úαá¼¼á login ¿ß»«½¡∩ÑΓß∩ »«ñ ¬«ñ«¼ ßπ»Ñα»«½∞º«óáΓѽ∩ ¿º ¬«α¡∩
- ß¿ßΓѼδ. Ä¡á ºá»αáΦ¿óáÑΓ π »«½∞º«óáΓѽ∩ αẽ¿τ¡πε ¿¡Σ«α¼áµ¿ε, ¡á»α¿¼Ñα, ¿¼∩
- ¿ »áα«½∞, ¿ Ñß½¿ φΓá ¿¡Σ«α¼áµ¿∩ »α¿¡¿¼áÑΓß∩ ß¿ßΓѼ«⌐, »α«úαá¼¼á ºá»π߬áÑΓ
- Σπ¡¬µ¿ε setuid, τΓ«íδ πßΓá¡«ó¿Γ∞ º¡áτÑ¡¿∩ αÑá½∞¡«ú« ¿ ¿ß»«½¡¿Γѽ∞¡«ú« ¬«ñ«ó
- ¿ñÑ¡Γ¿Σ¿¬áµ¿¿ ó ß««ΓóÑΓßΓó¿¿ ß ¿¡Σ«α¼áµ¿Ñ⌐, »«ßΓπ»¿óΦÑ⌐ «Γ »«½∞º«óáΓѽ∩ (»α¿
- φΓ«¼ ¿ß»«½∞ºπεΓß∩ ñá¡¡δÑ Σá⌐½á "/etc/passwd"). é ºá¬½ετÑ¡¿Ñ »α«úαá¼¼á login
- ¿¡¿µ¿¿απÑΓ ºá»π߬ ¬«¼á¡ñ¡«ú« »α«µÑßß«αá shell, ¬«Γ«αδ⌐ íπñÑΓ ¿ß»«½¡∩Γ∞ß∩ »«ñ
- π¬áºá¡¡δ¼¿ »«½∞º«óáΓѽ∞߬¿¼¿ ¬«ñἿ ¿ñÑ¡Γ¿Σ¿¬áµ¿¿.
- Åα¿¼Ñα«¼ setuid-»α«úαá¼¼δ ∩ó½∩ÑΓß∩ »α«úαá¼¼á, αÑ὿ºπεΘá∩ ¬«¼á¡ñπ mkdir.
- é αáºñÑ½Ñ 5.8 πªÑ ú«ó«α¿½«ß∞ « Γ«¼, τΓ« ß«ºñáΓ∞ ¬áΓὫú ¼«ªÑΓ Γ«½∞¬« »α«-
- µÑßß, óδ»«½¡∩εΘ¿⌐ß∩ »«ñ π»αáó½Ñ¡¿Ñ¼ ßπ»Ñα»«½∞º«óáΓѽ∩. ä½∩ Γ«ú«, τΓ«íδ »αÑ-
- ñ«ßΓáó¿Γ∞ 󫺼«ª¡«ßΓ∞ ß«ºñá¡¿∩ ¬áΓὫú«ó »α«ßΓδ¼ »«½∞º«óáΓѽ∩¼, ¬«¼á¡ñá
- mkdir íδ½á óδ»«½¡Ñ¡á ó ó¿ñÑ setuid-»α«úαá¼¼δ, »α¿¡áñ½ÑªáΘÑ⌐ ¬«α¡ε ß¿ßΓÑ¼δ ¿
- ¿¼ÑεΘÑ⌐ »αáóá ßπ»Ñα»«½∞º«óáΓѽ∩. ìá óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ¬«¼á¡ñδ mkdir »α«µÑßß
- »«½πτáÑΓ »αáóá ßπ»Ñα»«½∞º«óáΓѽ∩, ß«ºñáÑΓ ¬áΓὫú, ¿ß»«½∞ºπ∩ Σπ¡¬µ¿ε mknod,
- ¿ »αÑñ«ßΓáó½∩ÑΓ »αáóá ß«íßΓóÑ¡¡«ßΓ¿ ¿ ñ«ßΓπ»á ¬ ¬áΓὫúπ ¿ßΓ¿¡¡«¼π »«½∞º«óá-
- ΓÑ½ε »α«µÑßßá.
-
-
- E7.7 êçîàìàìêà ÉÇçîàÉÇ ÅÉÄûàææÇF
-
- æ »«¼«Θ∞ε ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ brk »α«µÑßß ¼«ªÑΓ πóѽ¿τ¿óáΓ∞ ¿ π¼Ñ¡∞ΦáΓ∞
- αẼÑα «í½áßΓ¿ ñá¡¡δσ. æ¿¡Γá¬ß¿ß ó맮óá Σπ¡¬µ¿¿:
- brk(endds);
- úñÑ endds - ßΓáαΦ¿⌐ ó¿αΓπá½∞¡δ⌐ áñαÑß «í½áßΓ¿ ñá¡¡δσ »α«µÑßßá (áñαÑß óÑασ¡Ñ⌐
- úαá¡¿µδ). æ ñαπú«⌐ ßΓ«α«¡δ, »«½∞º«óáΓѽ∞ ¼«ªÑΓ «íαáΓ¿Γ∞ß∩ ¬ Σπ¡¬µ¿¿ ß½Ññπε-
- Θ¿¼ «íαẫ¼:
- oldendds = sbrk(increment);
- úñÑ oldendds - ΓѬπΘ¿⌐ áñαÑß óÑασ¡Ñ⌐ úαá¡¿µδ «í½áßΓ¿, increment - τ¿ß½«
- íá⌐Γ, ¡á ¬«Γ«α«Ñ ¿º¼Ñ¡∩ÑΓß∩ º¡áτÑ¡¿Ñ oldendds ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ Σπ¡¬-
- µ¿¿. Sbrk - φΓ« ¿¼∩ ßΓá¡ñáαΓ¡«⌐ í¿í½¿«ΓÑτ¡«⌐ »«ñ»α«úαá¼¼δ ¡á æ¿, óδºδóáεΘÑ⌐
- Σπ¡¬µ¿ε brk. àß½¿ αẼÑα «í½áßΓ¿ ñá¡¡δσ »α«µÑßßá ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩
- Σπ¡¬µ¿¿ πóѽ¿τ¿óáÑΓß∩, ó¡«ó∞ óδñѽ∩Ѽ«Ñ »α«ßΓαá¡ßΓó« ¿¼ÑÑΓ ó¿αΓπá½∞¡δÑ áñαÑ-
- ßá, ߼Ѫ¡δÑ ß áñαÑßἿ πóѽ¿τ¿óáѼ«⌐ «í½áßΓ¿; Γᬿ¼ «íαẫ¼, ó¿αΓπá½∞¡«Ñ áñ-
- αÑß¡«Ñ »α«ßΓαá¡ßΓó« »α«µÑßßá αáßΦ¿α∩ÑΓß∩. Åα¿ φΓ«¼ ∩ñα« »α«óÑα∩ÑΓ, ¡Ñ »αÑóδ-
- ΦáÑΓ ½¿ ¡«óδ⌐ αẼÑα »α«µÑßßá ¼á¬ß¿¼á½∞¡«-ñ«»πßΓ¿¼«Ñ º¡áτÑ¡¿Ñ, »α¿¡∩Γ«Ñ ñ½∩
- ¡Ñú« ó ß¿ßΓѼÑ, á Γá¬ªÑ ¡Ñ ¡á¬½áñδóáÑΓß∩ ½¿ ¡«óá∩ «í½áßΓ∞ ñá¡¡δσ »α«µÑßßá ¡á
- ó¿αΓπá½∞¡«Ñ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó«, «ΓóÑñÑ¡¡«Ñ αá¡ÑÑ ñ½∩ ñαπú¿σ µÑ½Ñ⌐ (É¿ßπ-
- ¡«¬ 7.26). àß½¿ óßÑ ó »«α∩ñ¬Ñ, ∩ñα« ºá»π߬áÑΓ á½ú«α¿Γ¼ growreg, »α¿ß«Ññ¿¡∩∩
- ¬ «í½áßΓ¿ ñá¡¡δσ ó¡ÑΦ¡εε »á¼∩Γ∞ (¡á»α¿¼Ñα, Γáí½¿µδ ßΓαá¡¿µ) ¿ πóѽ¿τ¿óá∩
- º¡áτÑ¡¿Ñ »«½∩, «»¿ßδóáεΘÑú« αẼÑα »α«µÑßßá. é ß¿ßΓÑ¼Ñ ß ºá¼ÑΘÑ¡¿Ñ¼ ßΓαá¡¿µ
- ∩ñα« Γá¬ªÑ «Γó«ñ¿Γ »«ñ ¡«óπε «í½áßΓ∞ »α«ßΓαá¡ßΓó« «ß¡«ó¡«⌐ »á¼∩Γ¿ ¿ «í¡π½∩ÑΓ
- Ñú« ß«ñÑন¼«Ñ; Ñß½¿ ßó«í«ñ¡«⌐ »á¼∩Γ¿ ¡ÑΓ, ∩ñα« «ßó«í«ªñáÑΓ »á¼∩Γ∞ »πΓѼ
- óδúαπº¬¿ »α«µÑßßá (í«½ÑÑ »«ñα«í¡« «í φΓ«¼ ¼δ »«ú«ó«α¿¼ ó ú½áóÑ 9). àß½¿ ß
- »«¼«Θ∞ε Σπ¡¬µ¿¿ brk »α«µÑßß π¼Ñ¡∞ΦáÑΓ αẼÑα «í½áßΓ¿ ñá¡¡δσ, ∩ñα« «ßó«í«ªñá-
- ÑΓ τáßΓ∞ αá¡ÑÑ óδñѽѡ¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá; ¬«úñá »α«µÑßß »«»δΓáÑΓß∩
- «íαáΓ¿Γ∞ß∩ ¬ ñá¡¡δ¼ »« ó¿αΓπá½∞¡δ¼ áñαÑßá¼, »α¿¡áñ½ÑªáΘ¿¼ «ßó«í«ªñÑ¡¡«¼π
-
- 215
-
- »α«ßΓαá¡ßΓóπ, «¡ ßΓ«½¬¡ÑΓß∩ ß «Φ¿í¬«⌐ áñαÑßᵿ¿.
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ brk │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ¡«óδ⌐ áñαÑß óÑασ¡Ñ⌐ úαá¡¿µδ «í½áßΓ¿ │
- │ ñá¡¡δσ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: ßΓáαδ⌐ áñαÑß óÑασ¡Ñ⌐ úαá¡¿µδ «í½áßΓ¿ │
- │ ñá¡¡δσ │
- │ { │
- │ ºáí½«¬¿α«óáΓ∞ «í½áßΓ∞ ñá¡¡δσ »α«µÑßßá; │
- │ Ñß½¿ (αẼÑα «í½áßΓ¿ πóѽ¿τ¿óáÑΓß∩) │
- │ Ñß½¿ (¡«óδ⌐ αẼÑα «í½áßΓ¿ ¿¼ÑÑΓ ¡Ññ«»πßΓ¿¼«Ñ º¡á-│
- │ τÑ¡¿Ñ) │
- │ { │
- │ ß¡∩Γ∞ í½«¬¿α«ó¬π ß «í½áßΓ¿; │
- │ óÑα¡πΓ∞ («Φ¿í¬π); │
- │ } │
- │ ¿º¼Ñ¡¿Γ∞ αẼÑα «í½áßΓ¿ (á½ú«α¿Γ¼ growreg); │
- │ «í¡π½¿Γ∞ ß«ñÑন¼«Ñ »α¿ß«Ññ¿¡∩Ѽ«ú« »α«ßΓαá¡ßΓóá; │
- │ ß¡∩Γ∞ í½«¬¿α«ó¬π ß «í½áßΓ¿ ñá¡¡δσ; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.26. ǽú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ brk
-
-
- ìá É¿ßπ¡¬Ñ 7.27 »α¿óÑñÑ¡ »α¿¼Ñα »α«úαá¼¼δ, ¿ß»«½∞ºπεΘÑ⌐ Σπ¡¬µ¿ε brk, ¿
- óδσ«ñ¡δÑ ñá¡¡δÑ, »«½πτÑ¡¡δÑ ó αѺπ½∞ΓáΓÑ ÑÑ »α«ú«¡á ¡á ¼áΦ¿¡Ñ AT&T 3B20.
- éδºóáó Σπ¡¬µ¿ε signal ¿ αáß»«α∩ñ¿óΦ¿ß∞ »α¿¡¿¼áΓ∞ ß¿ú¡á½δ « ¡áαπΦÑ¡¿¿ ßÑú¼Ñ¡-
- Γᵿ¿ (segmentation violation), »α«µÑßß «íαáΘáÑΓß∩ ¬ »«ñ»α«úαá¼¼Ñ sbrk ¿ óδ-
- ó«ñ¿Γ ¡á »ÑτáΓ∞ »Ñαó«¡áτá½∞¡«Ñ º¡áτÑ¡¿Ñ áñαÑßá óÑασ¡Ñ⌐ úαá¡¿µδ «í½áßΓ¿ ñá¡-
- ¡δσ. çáΓѼ ó µ¿¬½Ñ, ¿ß»«½∞ºπ∩ ßτÑΓτ¿¬ ß¿¼ó«½«ó, »α«µÑßß ºá»«½¡∩ÑΓ «í½áßΓ∞
- ñá¡¡δσ ñ« ΓÑσ »«α, »«¬á ¡Ñ «íαáΓ¿Γß∩ ¬ áñαÑßπ, αáß»«½«ªÑ¡¡«¼π ºá »αÑñѽἿ
- «í½áßΓ¿, ΓѼ ßá¼δ¼ ñáóá∩ »«ó«ñ ñ½∩ ß¿ú¡á½á « ¡áαπΦÑ¡¿¿ ßÑú¼Ñ¡Γᵿ¿. Å«½πτ¿ó
- ß¿ú¡á½, Σπ¡¬µ¿∩ «íαáí«Γ¬¿ ß¿ú¡á½á óδºδóáÑΓ »«ñ»α«úαá¼¼π sbrk ñ½∩ Γ«ú«, τΓ«íδ
- »α¿ß«Ññ¿¡¿Γ∞ ¬ «í½áßΓ¿ ñ«»«½¡¿Γѽ∞¡« 256 íá⌐Γ »á¼∩Γ¿; »α«µÑßß »α«ñ«½ªáÑΓß∩ ß
- Γ«τ¬¿ »αÑαδóá¡¿∩, ºá»«½¡∩∩ ¿¡Σ«α¼áµ¿Ñ⌐ ó¡«ó∞ óδñѽѡ¡«Ñ »α«ßΓαá¡ßΓó« »á¼∩Γ¿
- ¿ Γ.ñ. ìá ¼áΦ¿¡áσ ß« ßΓαá¡¿τ¡«⌐ «αúá¡¿ºáµ¿Ñ⌐ »á¼∩Γ¿, Γᬿσ ¬á¬ 3B20, ¡áí½ε-
- ñáÑΓß∩ ¿¡ΓÑαÑß¡δ⌐ ΣÑ¡«¼Ñ¡. æΓαá¡¿µá ∩ó½∩ÑΓß∩ ¡á¿¼Ñ¡∞ΦÑ⌐ Ññ¿¡¿µÑ⌐ »á¼∩Γ¿, ß
- ¬«Γ«α«⌐ αáí«ΓáεΓ ¼Ñσá¡¿º¼δ á»»áαáΓ¡«⌐ ºáΘ¿Γδ, »«φΓ«¼π á»»áαáΓ¡δÑ ßαÑñßΓóá ¡Ñ
- ó ß«ßΓ«∩¡¿¿ πßΓá¡«ó¿Γ∞ «Φ¿í¬π ó úαá¡¿τ¡«⌐ ß¿Γπᵿ¿, ¬«úñá »α«µÑßß »δΓáÑΓß∩
- ºá»¿ßáΓ∞ ¿¡Σ«α¼áµ¿ε »« áñαÑßá¼, »αÑóδΦáεΘ¿¼ óÑασ¡εε úαá¡¿µπ «í½áßΓ¿ ñá¡¡δσ,
- ¡« »α¿¡áñ½ÑªáΘ¿¼ Γ.¡. "»«½π½Ñúá½∞¡«⌐" ßΓαá¡¿µÑ (ßΓαá¡¿µÑ, ¡Ñ »«½¡«ßΓ∞ε ºá¡∩-
- Γ«⌐ «í½áßΓ∞ε ñá¡¡δσ »α«µÑßßá). ¥Γ« ó¿ñ¡« ¿º αѺπ½∞ΓáΓ«ó óδ»«½¡Ñ¡¿∩ »α«úαá¼-
- ¼δ, óδóÑñÑ¡¡δσ ¡á »ÑτáΓ∞ (É¿ßπ¡«¬ 7.27): »Ñαóδ⌐ αẠ»«ñ»α«úαá¼¼á sbrk ó«ºó-
- αáΘáÑΓ º¡áτÑ¡¿Ñ 140924, Γ« ÑßΓ∞ áñαÑß, ¡Ñ ñ«Γ∩ú¿óáεΘ¿⌐ 388 íá⌐Γ ñ« ¬«¡µá
- ßΓαá¡¿µδ, ¬«Γ«αá∩ ¡á ¼áΦ¿¡Ñ 3B20 ¿¼ÑÑΓ αẼÑα 2 èíá⌐Γá. Äñ¡á¬« »α«µÑßß »«½π-
- τ¿Γ «Φ¿í¬π Γ«½∞¬« ó Γ«¼ ß½πτáÑ, Ñß½¿ «íαáΓ¿Γß∩ ¬ ß½ÑñπεΘÑ⌐ ßΓαá¡¿µÑ »á¼∩Γ¿,
- Γ« ÑßΓ∞ ¬ ½εí«¼π áñαÑßπ, ¡áτ¿¡á∩ ß 141312. öπ¡¬µ¿∩ «íαáí«Γ¬¿ ß¿ú¡á½á »α¿íáó-
- ½∩ÑΓ ¬ áñαÑßπ óÑασ¡Ñ⌐ úαá¡¿µδ «í½áßΓ¿ 256, ñѽá∩ Ñú« αáó¡δ¼ 141180 ¿, Γᬿ¼
- «íαẫ¼, «ßΓáó½∩∩ Ñú« ó »αÑñѽáσ ΓѬπΘÑ⌐ ßΓαá¡¿µδ. æ½Ññ«óáΓѽ∞¡«, »α«µÑßß
- ΓπΓ ªÑ ß¡«óá »«½πτ¿Γ «Φ¿í¬π, óδñáó ¡á »ÑτáΓ∞ áñαÑß 141312. êß»«½¡¿ó »«ñ»α«ú-
- αá¼¼π sbrk ÑΘÑ αáº, ∩ñα« óδñѽ∩ÑΓ »«ñ ñá¡¡δÑ »α«µÑßßá ¡«óπε ßΓαá¡¿µπ »á¼∩Γ¿,
- ΓᬠτΓ« »α«µÑßß »«½πτáÑΓ ó«º¼«ª¡«ßΓ∞ áñαÑß«óáΓ∞ ñ«»«½¡¿Γѽ∞¡« 2 èíá⌐Γá »á¼∩-
- Γ¿, ñ« áñαÑßá 143360, ñáªÑ Ñß½¿ óÑασ¡∩∩ úαá¡¿µá «í½áßΓ¿ αáß»«½áúáÑΓß∩ ¡¿ªÑ.
- Å«½πτ¿ó «Φ¿í¬π, »α«µÑßß ñ«½ªÑ¡ íπñÑΓ ó«ßѼ∞ αẠ«íαáΓ¿Γ∞ß∩ ¬ »«ñ»α«úαá¼¼Ñ
- sbrk, »αѪñÑ τѼ ß¼«ªÑΓ »α«ñ«½ª¿Γ∞ óδ»«½¡Ñ¡¿Ñ «ß¡«ó¡«⌐ »α«úαá¼¼δ. Æá¬¿¼ «í-
- αẫ¼, »α«µÑßß ¼«ªÑΓ ¿¡«úñá óδσ«ñ¿Γ∞ ºá «Σ¿µ¿á½∞¡πε óÑασ¡εε úαá¡¿µπ «í½áßΓ¿
- ñá¡¡δσ, σ«Γ∩ φΓ« ¿ ¡ÑªÑ½áΓѽ∞¡δ⌐ ¼«¼Ñ¡Γ ó »αá¬Γ¿¬Ñ »α«úαá¼¼¿α«óá¡¿∩.
-
- 216
-
- è«úñá ßΓѬ ºáñáτ¿ »ÑαÑ»«½¡∩ÑΓß∩, ∩ñα« áóΓ«¼áΓ¿τÑ߬¿ πóѽ¿τ¿óáÑΓ Ñú« αáº-
- ¼Ñα, óδ»«½¡∩∩ á½ú«α¿Γ¼, »«σ«ª¿⌐ ¡á á½ú«α¿Γ¼ Σπ¡¬µ¿¿ brk. ÅÑαó«¡áτá½∞¡« ßΓѬ
- ºáñáτ¿ ¿¼ÑÑΓ αẼÑα, ñ«ßΓáΓ«τ¡δ⌐ ñ½∩ σαá¡Ñ¡¿∩ »áαá¼ÑΓα«ó Σπ¡¬µ¿¿ exec, «ñ¡á-
- ¬« »α¿ óδ»«½¡Ñ¡¿¿ »α«µÑßßá
-
- ┌───────────────────────────────────────────────────────┐
- │ #include <signal.h> │
- │ char *cp; │
- │ int callno; │
- │ │
- │ main() │
- │ { │
- │ char *sbrk(); │
- │ extern catcher(); │
- │ │
- │ signal(SIGSEGV,catcher); │
- │ cp = sbrk(0); │
- │ printf("original brk value %u\n",cp); │
- │ for (;;) │
- │ *cp++ = 1; │
- │ } │
- │ │
- │ catcher(signo); │
- │ int signo; │
- │ { │
- │ callno++; │
- │ printf("caught sig %d %dth call at addr %u\n", │
- │ signo,callno,cp); │
- │ sbrk(256); │
- │ signal(SIGSEGV,catcher); │
- │ } │
- └───────────────────────────────────────────────────────┘
- ┌───────────────────────────────────────────┐
- │ original brk value 140924 │
- │ caught sig 11 1th call at addr 141312 │
- │ caught sig 11 2th call at addr 141312 │
- │ caught sig 11 3th call at addr 143360 │
- │ ...(ëà ªÑ áñαÑß »ÑτáΓáÑΓß∩ ñ« 10-ú« │
- │ ó맮óá »«ñ»α«úαá¼¼δ sbrk) │
- │ caught sig 11 10th call at addr 143360 │
- │ caught sig 11 11th call at addr 145408 │
- │ ...(ëà ªÑ áñαÑß »ÑτáΓáÑΓß∩ ñ« 18-ú« │
- │ ó맮óá »«ñ»α«úαá¼¼δ sbrk) │
- │ caught sig 11 18th call at addr 145408 │
- │ caught sig 11 19th call at addr 145408 │
- │ ∙ │
- │ ∙ │
- └───────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.27. Åα¿¼Ñα »α«úαá¼¼δ, ¿ß»«½∞ºπεΘÑ⌐ Σπ¡¬µ¿ε brk, ¿
- αѺπ½∞ΓáΓδ ÑÑ ¬«¡Γα«½∞¡«ú« »α«ú«¡á
-
-
- φëà ßΓѬ ¼«ªÑΓ »ÑαÑ»«½¡¿Γ∞ß∩. ÅÑαÑ»«½¡Ñ¡¿Ñ ßΓÑ¬á »α¿ó«ñ¿Γ ¬ «Φ¿í¬Ñ áñαÑßá-
- µ¿¿, ßó¿ñÑΓѽ∞ßΓóπεΘÑ⌐ « »«»δ⪥ »α«µÑßßá «íαáΓ¿Γ∞ß∩ ¬ ∩τÑ⌐¬Ñ »á¼∩Γ¿ ºá »αÑ-
- ñѽἿ «ΓóÑñÑ¡¡«ú« áñαÑß¡«ú« »α«ßΓαá¡ßΓóá. ƒñα« πßΓá¡áó½¿óáÑΓ »α¿τ¿¡π ó«º-
- ¡¿¬¡«óÑ¡¿∩ «Φ¿í¬¿, ßαáó¡¿óá∩ ΓѬπΘÑÑ º¡áτÑ¡¿Ñ π¬áºáΓѽ∩ óÑαΦ¿¡δ ßΓѬá ß αáº-
- ¼Ñα«¼ «í½áßΓ¿ ßΓѬá. Åα¿ αáßΦ¿αÑ¡¿¿ «í½áßΓ¿ ßΓѬá ∩ñα« ¿ß»«½∞ºπÑΓ Γ«τ¡« Γá-
- ¬«⌐ ªÑ ¼Ñσá¡¿º¼, τΓ« ¿ ñ½∩ «í½áßΓ¿ ñá¡¡δσ. ìá óδσ«ñÑ ¿º »αÑαδóá¡¿∩ »α«µÑßß
-
- 217
-
- ┌────────────────────────────────────────────────────────────┐
- │ /* τΓÑ¡¿Ñ ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ ñ« ß¿¼ó«½á ¬«¡µá Σá⌐½á */ │
- │ while (read(stdin,buffer,numchars)) │
- │ { │
- │ /* ß¿¡Γá¬ß¿τÑ߬¿⌐ αáºí«α ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ */ │
- │ if (/* ¬«¼á¡ñ¡á∩ ßΓ᫬á ß«ñÑαª¿Γ & */) │
- │ amper = 1; │
- │ else │
- │ amper = 0; │
- │ /* ñ½∩ ¬«¼á¡ñ, ¡Ñ ∩ó½∩εΘ¿σß∩ ¬«¡ßΓαπ¬µ¿∩¼¿ ¬«¼á¡ñ¡«ú« │
- │ ∩ºδ¬á shell */ │
- │ if (fork() == 0) │
- │ { │
- │ /* »ÑαÑáñαÑßᵿ∩ óó«ñá-óδó«ñá ? */ │
- │ if (/* »ÑαÑáñαÑßᵿ∩ óδó«ñá */) │
- │ { │
- │ fd = creat(newfile,fmask); │
- │ close(stdout); │
- │ dup(fd); │
- │ close(fd); │
- │ /* stdout ΓÑ»Ñα∞ »ÑαÑáñαÑß«óá¡ */ │
- │ } │
- │ if (/* ¿ß»«½∞ºπεΓß∩ ¬á¡á½δ */) │
- │ { │
- │ pipe(fildes); │
- │ │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.28. Äß¡«ó¡«⌐ µ¿¬½ »α«úαá¼¼δ shell
-
-
- ¿¼ÑÑΓ «í½áßΓ∞ ßΓÑ¬á ¡Ñ«íσ«ñ¿¼«ú« ñ½∩ »α«ñ«½ªÑ¡¿∩ αáí«Γδ αẼÑαá.
-
-
- E7.8 èÄîÇìäì¢ë ÅÉÄûàææÄÉ SHELLF
-
- ÆÑ»Ñα∞ π ¡áß ÑßΓ∞ ñ«ßΓáΓ«τ¡« ¼áΓÑα¿á½á, τΓ«íδ »ÑαÑ⌐Γ¿ ¬ «íΩ∩ߡѡ¿ε »α¿¡-
- µ¿»«ó αáí«Γδ ¬«¼á¡ñ¡«ú« »α«µÑßß«αá shell. æá¼ ¬«¼á¡ñ¡δ⌐ »α«µÑßß«α ¡á¼¡«ú«
- ß½«ª¡ÑÑ, τѼ Γ«, τΓ« ¼δ « ¡Ñ¼ ºñÑß∞ íπñѼ ¿º½áúáΓ∞, «ñ¡á¬« óºá¿¼«ñÑ⌐ßΓó¿Ñ
- »α«µÑßß«ó ¼δ πªÑ ¼«ªÑ¼ αáßß¼«ΓαÑΓ∞ ¡á »α¿¼ÑαÑ αÑá½∞¡«⌐ »α«úαá¼¼δ. ìá É¿ßπ¡¬Ñ
- 7.28 »α¿óÑñÑ¡ Σαáú¼Ñ¡Γ «ß¡«ó¡«ú« µ¿¬½á »α«úαá¼¼δ shell, ñѼ«¡ßΓα¿απεΘ¿⌐
- áß¿¡σα«¡¡«Ñ óδ»«½¡Ñ¡¿Ñ »α«µÑßß«ó, »ÑαѡạáτÑ¡¿Ñ óδó«ñá ¿ ¿ß»«½∞º«óá¡¿Ñ ¬á-
- ¡á½«ó.
- Shell ßτ¿ΓδóáÑΓ ¬«¼á¡ñ¡πε ßΓα«¬π ¿º Σá⌐½á ßΓá¡ñáαΓ¡«ú« óó«ñá ¿ ¿¡ΓÑα»αÑ-
- Γ¿απÑΓ ÑÑ ó ß««ΓóÑΓßΓó¿¿ ß πßΓá¡«ó½Ñ¡¡δ¼ ¡áí«α«¼ »αáó¿½. äÑß¬α¿»Γ«αδ Σá⌐½«ó
- ßΓá¡ñáαΓ¡«ú« óó«ñá ¿ ßΓá¡ñáαΓ¡«ú« óδó«ñá, ¿ß»«½∞ºπѼδÑ αÑú¿ßΓαᵿ«¡¡δ¼
- shell'«¼, ¬á¬ »αá󿽫, π¬áºδóáεΓ ¡á ΓÑନ¡á½, ß ¬«Γ«α«ú« »«½∞º«óáΓѽ∞ αÑú¿ß-
- Γα¿απÑΓß∩ ó ß¿ßΓÑ¼Ñ (ß¼. ú½áóπ 10). àß½¿ shell πº¡áÑΓ ó« óóÑñÑ¡¡«⌐ ßΓ᫬Ñ
- ¬«¡ßΓαπ¬µ¿ε ß«íßΓóÑ¡¡«ú« ¬«¼á¡ñ¡«ú« ∩ºδ¬á (¡á»α¿¼Ñα, «ñ¡π ¿º ¬«¼á¡ñ cd, for,
- while ¿ Γ.».), «¡ ¿ß»«½¡∩ÑΓ ¬«¼á¡ñπ ßó«¿¼¿ ß¿½á¼¿, ¡Ñ »α¿íÑúá∩ ¬ ß«ºñá¡¿ε
- ¡«óδσ »α«µÑßß«ó; ó »α«Γ¿ó¡«¼ ß½πτáÑ ¬«¼á¡ñá ¿¡ΓÑα»αÑΓ¿απÑΓß∩ ¬á¬ ¿¼∩ ¿ß»«½-
- ¡∩Ѽ«ú« Σá⌐½á.
- 諼á¡ñ¡δÑ ßΓ᫬¿ »α«ßΓÑ⌐ΦÑú« ó¿ñá ß«ñÑαªáΓ ¿¼∩ »α«úαá¼¼δ ¿ ¡Ñ߬«½∞¬« »á-
- αá¼ÑΓα«ó, ¡á»α¿¼Ñα:
-
- who
- grep -n include *.c
- ls -l
-
-
- 218
-
- ┌────────────────────────────────────────────────────────────┐
- │ if (fork() == 0) │
- │ { │
- │ /* »Ñαóá∩ ¬«¼»«¡Ñ¡Γá ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ */│
- │ close(stdout); │
- │ dup(fildes[1]); │
- │ close(fildes[1]); │
- │ close(fildes[0]); │
- │ /* ßΓá¡ñáαΓ¡δ⌐ óδó«ñ ¡á»αáó½∩ÑΓß∩ ó ¬á- │
- │ ¡á½ */ │
- │ /* ¬«¼á¡ñπ ¿ß»«½¡∩ÑΓ »«α«ªñÑ¡¡δ⌐ »α«- │
- │ µÑßß */ │
- │ execlp(command1,command1,0); │
- │ } │
- │ /* óΓ«αá∩ ¬«¼»«¡Ñ¡Γá ¬«¼á¡ñ¡«⌐ ßΓ᫬¿ */ │
- │ close(stdin); │
- │ dup(fildes[0]); │
- │ close(fildes[0]); │
- │ close(fildes[1]); │
- │ /* ßΓá¡ñáαΓ¡δ⌐ óó«ñ íπñÑΓ »α«¿ºó«ñ¿Γ∞ß∩ ¿º│
- │ ¬á¡á½á */ │
- │ } │
- │ execve(command2,command2,0); │
- │ } │
- │ /* ß φΓ«ú« ¼ÑßΓá »α«ñ«½ªáÑΓß∩ óδ»«½¡Ñ¡¿Ñ α«ñ¿Γѽ∞߬«ú« │
- │ * »α«µÑßßá... │
- │ * »α«µÑßß-α«ñ¿Γѽ∞ ªñÑΓ ºáóÑαΦÑ¡¿∩ óδ»«½¡Ñ¡¿∩ »«Γ«¼¬á,│
- │ * Ñß½¿ φΓ« óδΓѬáÑΓ ¿º óóÑñÑ¡¡«⌐ ßΓ᫬¿ │
- │ * / │
- │ if (amper == 0) │
- │ retid = wait(&status); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.28. Äß¡«ó¡«⌐ µ¿¬½ »α«úαá¼¼δ shell (»α«ñ«½ªÑ¡¿Ñ)
-
-
-
- Shell "óÑΓó¿Γß∩" (fork) ¿ »«α«ªñáÑΓ ¡«óδ⌐ »α«µÑßß, ¬«Γ«αδ⌐ ¿ ºá»π߬áÑΓ »α«ú-
- αá¼¼π, π¬áºá¡¡πε »«½∞º«óáΓѽѼ ó ¬«¼á¡ñ¡«⌐ ßΓ᫬Ñ. É«ñ¿Γѽ∞߬¿⌐ »α«µÑßß
- (shell) ñ«ª¿ñáÑΓß∩ ºáóÑαΦÑ¡¿∩ »«Γ«¼¬á ¿ »«óΓ«α∩ÑΓ µ¿¬½ ßτ¿Γδóá¡¿∩ ß½ÑñπεΘÑ⌐
- ¬«¼á¡ñδ.
- àß½¿ »α«µÑßß ºá»π߬áÑΓß∩ áß¿¡σα«¡¡« (¡á Σ«¡Ñ «ß¡«ó¡«⌐ »α«úαá¼¼δ), ¬á¬ ó
- ß½ÑñπεΘѼ »α¿¼ÑαÑ
-
- nroff -mm bigdocument &
-
- shell á¡á½¿º¿απÑΓ ¡á½¿τ¿Ñ ß¿¼ó«½á á¼»Ñαßá¡ñ (&) ¿ ºá¡«ß¿Γ αѺπ½∞ΓáΓ »α«óÑન
- ó« ó¡πΓαÑ¡¡εε »ÑαѼѡ¡πε amper. é ¬«¡µÑ «ß¡«ó¡«ú« µ¿¬½á shell «íαáΘáÑΓß∩ ¬
- φΓ«⌐ »ÑαѼѡ¡«⌐ ¿, Ñß½¿ «í¡áαπª¿óáÑΓ ó ¡Ñ⌐ »α¿º¡á¬ ¡á½¿τ¿∩ ß¿¼ó«½á, ¡Ñ óδ-
- »«½¡∩ÑΓ Σπ¡¬µ¿ε wait, á ΓπΓ ªÑ »«óΓ«α∩ÑΓ µ¿¬½ ßτ¿Γδóá¡¿∩ ß½ÑñπεΘÑ⌐ ¬«¼á¡ñδ.
-
- êº α¿ßπ¡¬á ó¿ñ¡«, τΓ« »α«µÑßß-»«Γ«¼«¬ »« ºáóÑαΦÑ¡¿¿ Σπ¡¬µ¿¿ fork »«½πτá-
- ÑΓ ñ«ßΓπ» ¬ ¬«¼á¡ñ¡«⌐ ßΓ᫬Ñ, »α¿¡∩Γ«⌐ shell'«¼. ä½∩ Γ«ú«, τΓ«íδ »ÑαÑáñαÑß«-
- óáΓ∞ ßΓá¡ñáαΓ¡δ⌐ óδó«ñ ó Σá⌐½, ¬á¬ ó ß½ÑñπεΘѼ »α¿¼ÑαÑ
-
- nroff -mm bigdocument > output
-
- »α«µÑßß-»«Γ«¼«¬ ß«ºñáÑΓ Σá⌐½ óδó«ñá ß π¬áºá¡¡δ¼ ó ¬«¼á¡ñ¡«⌐ ßΓα«¬Ñ ¿¼Ñ¡Ñ¼;
-
- 219
-
- Ñß½¿ Σá⌐½ ¡Ñ πñáÑΓß∩ ß«ºñáΓ∞ (¡á»α¿¼Ñα, ¡Ñ αáºαÑΦÑ¡ ñ«ßΓπ» ¬ ¬áΓὫúπ), »α«-
- µÑßß-»«Γ«¼«¬ ΓπΓ ªÑ ºáóÑαΦáÑΓß∩. é »α«Γ¿ó¡«¼ ß½πτáÑ »α«µÑßß-»«Γ«¼«¬ ºá¬αδóá-
- ÑΓ ßΓáαδ⌐ Σá⌐½ ßΓá¡ñáαΓ¡«ú« óδó«ñá ¿ »ÑαѡạáτáÑΓ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ dup
- ñÑß¬α¿»Γ«α φΓ«ú« Σá⌐½á ¡«ó«¼π Σá⌐½π. æΓáαδ⌐ ñÑß¬α¿»Γ«α ß«ºñá¡¡«ú« Σá⌐½á ºá¬-
- αδóáÑΓß∩ ¿ ß«σαá¡∩ÑΓß∩ ñ½∩ ºá»π߬áѼ«⌐ »α«úαá¼¼δ. Å«ñ«í¡δ¼ ªÑ «íαẫ¼ shell
- »ÑαѡạáτáÑΓ ¿ ßΓá¡ñáαΓ¡δ⌐ óó«ñ ¿ ßΓá¡ñáαΓ¡δ⌐ óδó«ñ «Φ¿í«¬.
-
- ┌───────────┐
- │ Shell │
- └─────┬─────┘ wait
- │ ^
- │ │
- ┌─────┴─────┐ exit
- │ wc │
- └─────┬─────┘ read
- │ ^
- │ │
- ┌─────┴─────┐ write
- │ ls - l │
- └───────────┘
-
- É¿ßπ¡«¬ 7.29. éºá¿¼«ßó∩º∞ ¼Ñªñπ »α«µÑßßἿ, ¿ß»«½¡∩εΘ¿¼¿ ¬«-
- ¼á¡ñ¡πε ßΓ᫬π ls -l│wc
-
-
- êº »α¿óÑñÑ¡¡«ú« ΓѬßΓá »α«úαá¼¼δ ó¿ñ¡«, ¬á¬ shell «íαáíáΓδóáÑΓ ¬«¼á¡ñ¡πε
- ßΓ᫬π, ¿ß»«½∞ºπ∩ «ñ¿¡ ¬á¡á½. ä«»πßΓ¿¼, τΓ« ¬«¼á¡ñ¡á∩ ßΓα«¬á ¿¼ÑÑΓ ó¿ñ:
- ls -l│wc
- Å«ß½Ñ ß«ºñá¡¿∩ α«ñ¿Γѽ∞߬¿¼ »α«µÑßß«¼ ¡«ó«ú« »α«µÑßßá »α«µÑßß-»«Γ«¼«¬ ß«ºñá-
- ÑΓ ¬á¡á½. çáΓѼ »α«µÑßß-»«Γ«¼«¬ ß«ºñáÑΓ ßó«Ñ «ΓóÑΓó½Ñ¡¿Ñ; «¡ ¿ Ñú« »«Γ«¼«¬
- «íαáíáΓδóáεΓ »« «ñ¡«⌐ ¬«¼»«¡Ñ¡ΓÑ ¬«¼á¡ñ¡«⌐ ßΓ᫬¿. "é¡πτáΓδ⌐" »α«µÑßß ¿ß»«½-
- ¡∩ÑΓ »Ñαóπε ¬«¼»«¡Ñ¡Γπ ßΓ᫬¿ (ls): «¡ ß«í¿αáÑΓß∩ óÑßΓ¿ ºá»¿ß∞ ó ¬á¡á½, »«φ-
- Γ«¼π «¡ ºá¬αδóáÑΓ ßΓáαδ⌐ Σá⌐½ ßΓá¡ñáαΓ¡«ú« óδó«ñá, »ÑαÑñáÑΓ Ñú« ñÑß¬α¿»Γ«α
- ¬á¡á½π ¿ ºá¬αδóáÑΓ ßΓáαδ⌐ ñÑß¬α¿»Γ«α ºá»¿ß¿ ó ¬á¡á½, ó ¬«Γ«α«¼ (ó ñÑß¬α¿»Γ«-
- αÑ) πªÑ ¡ÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ¿. É«ñ¿Γѽ∞ (wc) "ó¡πτáΓ«ú«" »α«µÑßßá (ls) ∩ó½∩ÑΓß∩
- »«Γ«¼¬«¼ «ß¡«ó¡«ú« »α«µÑßßá, αÑ὿ºπεΘÑú« »α«úαá¼¼π shell'á (ß¼. É¿ßπ¡«¬
- 7.29). ¥Γ«Γ »α«µÑßß (wc) ºá¬αδóáÑΓ ßó«⌐ Σá⌐½ ßΓá¡ñáαΓ¡«ú« óó«ñá ¿ »ÑαÑñáÑΓ
- Ñú« ñÑß¬α¿»Γ«α ¬á¡á½π, ó αѺπ½∞ΓáΓÑ τÑú« ¬á¡á½ ßΓá¡«ó¿Γß∩ Σá⌐½«¼ ßΓá¡ñáαΓ¡«-
- ú« óó«ñá. çáΓѼ ºá¬αδóáÑΓß∩ ßΓáαδ⌐ ¿ πªÑ ¡Ñ ¡πª¡δ⌐ ñÑß¬α¿»Γ«α τΓÑ¡¿∩ ¿º ¬á-
- ¡á½á ¿ ¿ß»«½¡∩ÑΓß∩ óΓ«αá∩ ¬«¼»«¡Ñ¡Γá ¬«¼á¡ñ¡«⌐ ßΓ᫬¿. Äíá »«α«ªñÑ¡¡δσ »α«-
- µÑßßá óδ»«½¡∩εΓß∩ áß¿¡σα«¡¡«, »α¿τѼ óδσ«ñ «ñ¡«ú« »α«µÑßßá »«ßΓπ»áÑΓ ¡á óσ«ñ
- ñαπú«ú«. ÆÑ¼ óαѼѡѼ «ß¡«ó¡«⌐ »α«µÑßß ñ«ª¿ñáÑΓß∩ ºáóÑαΦÑ¡¿∩ ßó«Ñú« »«Γ«¼¬á
- (wc), »«ß½Ñ τÑú« »α«ñ«½ªáÑΓ ßó«ε «íδτ¡πε αáí«Γπ: »« ºáóÑαΦÑ¡¿¿ »α«µÑßßá, óδ-
- »«½¡∩εΘÑú« ¬«¼á¡ñπ wc, óß∩ ¬«¼á¡ñ¡á∩ ßΓ᫬á ∩ó½∩ÑΓß∩ «íαáí«Γá¡¡«⌐. Shell
- ó«ºóαáΘáÑΓß∩ ó µ¿¬½ ¿ ßτ¿ΓδóáÑΓ ß½ÑñπεΘπε ¬«¼á¡ñ¡πε ßΓ᫬π.
-
-
- E7.9 çÇâÉôçèÇ æêæÆàî¢ ê ìÇùÇï£ì¢ë ÅÉÄûàææF
-
- ä½∩ Γ«ú«, τΓ«íδ »ÑαÑóÑßΓ¿ ß¿ßΓÑ¼π ¿º ¡Ñá¬Γ¿ó¡«Ñ ß«ßΓ«∩¡¿Ñ ó á¬Γ¿ó¡«Ñ,
- áñ¼¿¡¿ßΓαáΓ«α óδ»«½¡∩ÑΓ »α«µÑñπαπ "¡áτá½∞¡«⌐ ºáúαπº¬¿". ìá αạδσ ¼áΦ¿¡áσ
- φΓá »α«µÑñπαá ¿¼ÑÑΓ ßó«¿ «ß«íÑ¡¡«ßΓ¿, «ñ¡á¬« ó« óßÑσ ß½πτá∩σ «¡á αÑ὿ºπÑΓ
- «ñ¡π ¿ Γπ ªÑ µÑ½∞: ºáúαπº¿Γ∞ ¬«»¿ε «»Ñαᵿ«¡¡«⌐ ß¿ßΓѼδ ó «ß¡«ó¡πε »á¼∩Γ∞
- ¼áΦ¿¡δ ¿ ºá»πßΓ¿Γ∞ ÑÑ ¡á ¿ß»«½¡Ñ¡¿Ñ. Äíδτ¡« »α«µÑñπαá ¡áτá½∞¡«⌐ ºáúαπº¬¿
- ó¬½ετáÑΓ ó ßÑí∩ ¡Ñ߬«½∞¬« φΓừó. ÅÑαѬ½ετÑ¡¿Ñ¼ ¬½áó¿Φ ¡á »π½∞ΓÑ ¼áΦ¿¡δ áñ-
- ¼¿¡¿ßΓαáΓ«α ¼«ªÑΓ π¬áºáΓ∞ áñαÑß ß»Ñµ¿á½∞¡«⌐ »α«úαá¼¼δ á»»áαáΓ¡«⌐ ºáúαπº¬¿, á
- ¼«ªÑΓ, ¡áªáó Γ«½∞¬« «ñ¡π ¬½áó¿Φπ, ñáΓ∞ ¬«¼á¡ñπ ¼áΦ¿¡Ñ ºá»πßΓ¿Γ∞ »α«µÑñπαπ
- ºáúαπº¬¿, ¿ß»«½¡Ñ¡¡πε ó ó¿ñÑ ¼¿¬α«»α«úαá¼¼δ. ¥Γá »α«úαá¼¼á ¼«ªÑΓ ß«ßΓ«∩Γ∞ ¿º
- ¡Ñ߬«½∞¬¿σ ¬«¼á¡ñ, »«ñú«Γáó½¿óáεΘ¿σ ºá»π߬ ñαπú«⌐ »α«úαá¼¼δ. é ß¿ßΓÑ¼Ñ UNIX
-
- 220
-
- »α«µÑñπαá ¡áτá½∞¡«⌐ ºáúαπº¬¿ ºá¬á¡τ¿óáÑΓß∩ ßτ¿Γδó᡿Ѽ ß ñ¿ß¬á ó »á¼∩Γ∞ í½«-
- ¬á ¡áτá½∞¡«⌐ ºáúαπº¬¿ (¡π½Ñó«ú« í½«¬á). Åα«úαá¼¼á, ß«ñÑαªáΘá∩ß∩ ó φΓ«¼ í½«-
- ¬Ñ, ºáúαπªáÑΓ ¿º Σá⌐½«ó«⌐ ß¿ßΓѼδ ∩ñα« Äæ (¡á»α¿¼Ñα, ¿º Σá⌐½á ß ¿¼Ñ¡Ñ¼
- "/unix" ¿½¿ ß ñαπú¿¼ ¿¼Ñ¡Ñ¼, π¬áºá¡¡δ¼ áñ¼¿¡¿ßΓαáΓ«α«¼). Å«ß½Ñ ºáúαπº¬¿ ∩ñαá
- ß¿ßΓѼδ ó »á¼∩Γ∞ π»αáó½Ñ¡¿Ñ »ÑαÑñáÑΓß∩ »« ßΓáαΓ«ó«¼π áñαÑßπ ∩ñαá ¿ ∩ñα« ºá-
- »π߬áÑΓß∩ ¡á óδ»«½¡Ñ¡¿Ñ (á½ú«α¿Γ¼ start, É¿ßπ¡«¬ 7.30).
- ƒñα« ¿¡¿µ¿á½¿º¿απÑΓ ßó«¿ ó¡πΓαÑ¡¡¿Ñ ßΓαπ¬Γπαδ ñá¡¡δσ. æαÑñ¿ »α«τ¿σ
- ßΓαπ¬Γπα ∩ñα« ß«ºñáÑΓ ßó∩º¡δÑ ß»¿ß¬¿ ßó«í«ñ¡δσ íπΣÑα«ó ¿ ¿¡ñѬ߫ó, σÑΦ-«τÑ-
- αÑñ¿ ñ½∩ íπΣÑα«ó ¿ ¿¡ñѬ߫ó, ¿¡¿µ¿á½¿º¿απÑΓ ßΓαπ¬Γπαδ «í½áßΓÑ⌐, Γ«τ¬¿ óσ«ñá
- ó Γáí½¿µδ ßΓαá¡¿µ ¿ Γ.ñ. Å« «¬«¡τá¡¿¿ φΓ«⌐ Σáºδ ∩ñα« ¼«¡Γ¿απÑΓ ¬«α¡Ñóπε Σá⌐-
- ½«óπε ß¿ßΓÑ¼π ¿ Σ«α¼¿απÑΓ ßαÑñπ óδ»«½¡Ñ¡¿∩ ¡π½Ñó«ú« »α«µÑßßá, ßαÑñ¿ óßÑú«
- »α«τÑú« ß«ºñáóá∩ »α«ßΓαá¡ßΓó« »α«µÑßßá, ¿¡¿µ¿á½¿º¿απ∩ ¡π½Ñóπε Γ«τ¬π óσ«ñá ó
- Γáí½¿µÑ »α«µÑßßá ¿ ñѽá∩ ¬«α¡Ñó«⌐ ¬áΓὫú ΓѬπΘ¿¼ ñ½∩ »α«µÑßßá.
- è«úñá Σ«α¼¿α«óá¡¿Ñ ßαÑñδ óδ»«½¡Ñ¡¿∩ »α«µÑßßá ºá¬á¡τ¿óáÑΓß∩, ß¿ßΓÑ¼á ¿ß-
- »«½¡∩ÑΓß∩ πªÑ ó ó¿ñÑ ¡π½Ñó«ú« »α«µÑßßá. ìπ½Ñó«⌐ »α«µÑßß "óÑΓó¿Γß∩", ºá»π߬á∩
- á½ú«α¿Γ¼ fork »α∩¼« ¿º ∩ñαá, »«ß¬«½∞¬π ßá¼ »α«µÑßß ¿ß»«½¡∩ÑΓß∩ ó αѪ¿¼Ñ ∩ñ-
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ start /* »α«µÑñπαá ¡áτá½∞¡«⌐ ºáúαπº¬¿ ß¿ßΓѼδ */│
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ »α«¿¡¿µ¿á½¿º¿α«óáΓ∞ óßÑ ßΓαπ¬Γπαδ ñá¡¡δσ ∩ñαá; │
- │ »ßÑóñ«-¼«¡Γ¿α«óá¡¿Ñ ¬«α¡∩; │
- │ ßΣ«α¼¿α«óáΓ∞ ßαÑñπ óδ»«½¡Ñ¡¿∩ »α«µÑßßá 0; │
- │ ß«ºñáΓ∞ »α«µÑßß 1; │
- │ { │
- │ /* »α«µÑßß 1 */ │
- │ óδñѽ¿Γ∞ «í½áßΓ∞; │
- │ »«ñ¬½ετ¿Γ∞ «í½áßΓ∞ ¬ áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ »α«µÑßßá│
- │ init; │
- │ πóѽ¿τ¿Γ∞ αẼÑα «í½áßΓ¿ ñ½∩ ¬«»¿α«óá¡¿∩ ó ¡ÑÑ ¿ß- │
- │ »«½¡∩Ѽ«ú« ¬«ñá; │
- │ ߬«»¿α«óáΓ∞ ¿º »α«ßΓαá¡ßΓóá ∩ñαá ó áñαÑß¡«Ñ »α«ßΓ- │
- │ αá¡ßΓó« »α«µÑßßá ¬«ñ »α«úαá¼¼δ, ¿ß»«½¡∩Ѽ«⌐ »α«µÑß-│
- │ ß«¼; │
- │ ¿º¼Ñ¡¿Γ∞ αѪ¿¼ óδ»«½¡Ñ¡¿∩: óÑα¡πΓ∞ß∩ ¿º αѪ¿¼á ∩ñαá │
- │ ó αѪ¿¼ ºáñáτ¿; │
- │ /* »α«µÑßß init ñá½ÑÑ óδ»«½¡∩ÑΓß∩ ßἫßΓ«∩Γѽ∞¡« -- │
- │ * ó αѺπ½∞ΓáΓÑ óδσ«ñá ó αѪ¿¼ ºáñáτ¿, │
- │ * init ¿ß»«½¡∩ÑΓ Σá⌐½ "/etc/init" ¿ ßΓá¡«ó¿Γß∩ │
- │ * "«íδτ¡δ¼" »«½∞º«óáΓѽ∞߬¿¼ »α«µÑßß«¼, »α«¿ºó«ñ∩- │
- │ * Θ¿¼ «íαáΘÑ¡¿∩ ¬ ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼ │
- │ */ │
- │ } │
- │ /* »α«ñ«½ªÑ¡¿Ñ ¡π½Ñó«ú« »α«µÑßßá */ │
- │ »«α«ñ¿Γ∞ »α«µÑßßδ ∩ñαá; │
- │ /* ¡π½Ñó«⌐ »α«µÑßß ºá»π߬áÑΓ »α«úαá¼¼π »«ñ¬áτ¬¿, π»αáó- │
- │ * ½∩εΘπε αáß»αÑñѽѡ¿Ñ¼ áñαÑß¡«ú« »α«ßΓαá¡ßΓóá »α«µÑß- │
- │ * ß«ó ¼Ñªñπ «ß¡«ó¡«⌐ »á¼∩Γ∞ε ¿ πßΓα«⌐ßΓóἿ óδúαπº¬¿. │
- │ * ¥Γ« íÑ߬«¡Ñτ¡δ⌐ µ¿¬½; ¡π½Ñó«⌐ »α«µÑßß «íδτ¡« »α¿«ßΓá-│
- │ * ¡áó½¿óáÑΓ ßó«ε αáí«Γπ, Ñß½¿ ¡Ñ«íσ«ñ¿¼«ßΓ¿ ó ¡Ñ¼ í«½∞-│
- │ * ΦÑ ¡ÑΓ. │
- │ */ │
- │ ¿ß»«½¡¿Γ∞ »α«úαá¼¼π, αÑ὿ºπεΘπε á½ú«α¿Γ¼ »«ñ¬áτ¬¿; │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.30. ǽú«α¿Γ¼ ºáúαπº¬¿ ß¿ßΓѼδ
-
- 221
-
- αá. Å«α«ªñÑ¡¡δ⌐ ¡π½Ñóδ¼ ¡«óδ⌐ »α«µÑßß, »α«µÑßß 1, ºá»π߬áÑΓß∩ ó Γ«¼ ªÑ αѪ¿-
- ¼Ñ ¿ ß«ºñáÑΓ ßó«⌐ »«½∞º«óáΓѽ∞߬¿⌐ ¬«¡ΓѬßΓ, Σ«α¼¿απ∩ «í½áßΓ∞ ñá¡¡δσ ¿ »α¿-
- ß«Ññ¿¡∩∩ ÑÑ ¬ ßó«Ñ¼π áñαÑß¡«¼π »α«ßΓαá¡ßΓóπ. Ä¡ πóѽ¿τ¿óáÑΓ αẼÑα «í½áßΓ¿
- ñ« ¡áñ½ÑªáΘÑ⌐ óѽ¿τ¿¡δ ¿ »ÑαÑ»¿ßδóáÑΓ »α«úαá¼¼π ºáúαπº¬¿ ¿º áñαÑß¡«ú« »α«ßΓ-
- αá¡ßΓóá ∩ñαá ó ¡«óπε «í½áßΓ∞: φΓá »α«úαá¼¼á ΓÑ»Ñα∞ íπñÑΓ «»αÑñѽ∩Γ∞ ¬«¡ΓѬßΓ
- »α«µÑßßá 1. çáΓѼ »α«µÑßß 1 ß«σαá¡∩ÑΓ αÑú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ ºáñáτ¿, "ó«ºóαá-
- ΘáÑΓß∩" ¿º αѪ¿¼á ∩ñαá ó αѪ¿¼ ºáñáτ¿ ¿ ¿ß»«½¡∩ÑΓ Γ«½∞¬« τΓ« »ÑαÑ»¿ßá¡¡πε
- »α«úαá¼¼π. é «Γ½¿τ¿Ñ «Γ ¡π½Ñó«ú« »α«µÑßßá, ¬«Γ«αδ⌐ ∩ó½∩ÑΓß∩ »α«µÑßß«¼ ß¿ß-
- ΓѼ¡«ú« πα«ó¡∩, óδ»«½¡∩εΘ¿¼ß∩ ó αѪ¿¼Ñ ∩ñαá, »α«µÑßß 1 «Γ¡«ß¿Γß∩ ¬ »«½∞º«óá-
- Γѽ∞߬«¼π πα«ó¡ε. è«ñ, ¿ß»«½¡∩Ѽδ⌐ »α«µÑßß«¼ 1, ó¬½ετáÑΓ ó ßÑí∩ ó맮ó ß¿ß-
- ΓѼ¡«⌐ Σπ¡¬µ¿¿ exec, ºá»π߬áεΘÑ⌐ ¡á óδ»«½¡Ñ¡¿Ñ »α«úαá¼¼π ¿º Σá⌐½á
- "/etc/init". Äíδτ¡« »α«µÑßß 1 ¿¼Ñ¡πÑΓß∩ »α«µÑßß«¼ init, »«ß¬«½∞¬π «¡ «ΓóÑτá-
- ÑΓ ºá ¿¡¿µ¿á½¿ºáµ¿ε ¡«óδσ »α«µÑßß«ó.
- èáºá½«ß∞ íδ, ºáτѼ ∩ñα𠬫»¿α«óáΓ∞ »α«úαá¼¼π, ºá»π߬áѼπε ß »«¼«Θ∞ε Σπ¡-
- ¬µ¿¿ exec, ó áñαÑß¡«Ñ »α«ßΓαá¡ßΓó« »α«µÑßßá 1 ? Ä¡ ¼«ú íδ «íαáΓ¿Γ∞ß∩ ¬ ó¡πΓ-
- αÑ¡¡Ñ¼π óáα¿á¡Γπ Σπ¡¬µ¿¿ »α∩¼« ¿º ∩ñαá, «ñ¡á-
- ¬«, »« ßαáó¡Ñ¡¿ε ß πªÑ «»¿ßá¡¡δ¼ á½ú«α¿Γ¼«¼ φΓ« í佫 íδ ú«αáºñ« Γαπñ¡ÑÑ αÑá-
- ½¿º«óáΓ∞, ¿í« ó φΓ«¼ ß½πτáÑ Σπ¡¬µ¿¿ exec »α¿Φ½«ß∞ íδ »α«¿ºó«ñ¿Γ∞ á¡á½¿º ¿¼Ñ¡
- Σá⌐½«ó ó »α«ßΓαá¡ßΓóÑ ∩ñαá, á ¡Ñ ó »α«ßΓαá¡ßΓóÑ ºáñáτ¿. Å«ñ«í¡á∩ ñÑΓá½∞,
- ΓαÑíπεΘá∩ß∩ Γ«½∞¬« ñ½∩ »α«µÑßßá init, πß½«ª¡¿½á íδ »α«úαá¼¼π αÑ὿ºáµ¿¿ Σπ¡-
- ¬µ¿¿ exec ¿ «Γα¿µáΓѽ∞¡« «Γαế½áß∞ íδ ¡á ߬«α«ßΓ¿ óδ»«½¡Ñ¡¿∩ Σπ¡¬µ¿¿ ó í«-
- ½ÑÑ «íΘ¿σ ß½πτá∩σ.
- Åα«µÑßß init (É¿ßπ¡«¬ 7.31) óδßΓπ»áÑΓ ñ¿ß»ÑΓτÑα«¼ »α«µÑßß«ó, ¬«Γ«αδ⌐ »«-
- ᫪ñáÑΓ »α«µÑßßδ, ßαÑñ¿ óßÑú« »α«τÑú« »«ºó«½∩εΘ¿Ñ »«½∞º«óáΓѽε αÑú¿ßΓα¿α«-
- óáΓ∞ß∩ ó ß¿ßΓѼÑ. ê¡ßΓαπ¬µ¿¿ « Γ«¼, ¬á¬¿Ñ »α«µÑßßδ ¡πª¡« ß«ºñáΓ∞, ßτ¿ΓδóáεΓ-
- ß∩ »α«µÑßß«¼ init ¿º Σá⌐½á "/etc/inittab". æΓ᫬¿ Σá⌐½á ó¬½ετáεΓ ó ßÑí∩
- ¿ñÑ¡Γ¿Σ¿¬áΓ«α ß«ßΓ«∩¡¿∩ "id" («ñ¡«»«½∞º«óáΓѽ∞߬¿⌐ αѪ¿¼, ¼¡«ú«»«½∞º«óáΓѽ∞-
- ߬¿⌐ ¿ Γ. ñ.), »αÑñ»α¿¡¿¼áѼ«Ñ ñÑ⌐ßΓó¿Ñ (ß¼. π»α᪡ѡ¿Ñ 7.43) ¿ ߻ѵ¿Σ¿¬áµ¿ε
- »α«úαá¼¼δ, αÑ὿ºπεΘÑ⌐ φΓ« ñÑ⌐ßΓó¿Ñ (ß¼. É¿ßπ¡«¬ 7.32). Åα«µÑßß init »α«ß-
- ¼áΓα¿óáÑΓ ßΓ᫬¿ Σá⌐½á ñ« ΓÑσ »«α, »«¬á ¡Ñ «í¡áαπª¿Γ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ß«ßΓ«∩-
- ¡¿∩, ß««ΓóÑΓßΓóπεΘÑú« Γ«¼π ß«ßΓ«∩¡¿ε, ó ¬«Γ«α«¼ ¡áσ«ñ¿Γß∩ »α«µÑßß, ¿ ß«ºñáÑΓ
- »α«µÑßß, ¿ß»«½¡∩εΘ¿⌐ »α«úαá¼¼π ß π¬áºá¡¡«⌐ ߻ѵ¿Σ¿¬áµ¿Ñ⌐. ìá»α¿¼Ñα, »α¿ ºá-
- »πß¬Ñ ó ¼¡«ú«»«½∞º«óáΓѽ∞߬«¼ αѪ¿¼Ñ (ß«ßΓ«∩¡¿Ñ 2) »α«µÑßß init «íδτ¡« »«-
- ᫪ñáÑΓ getty-»α«µÑßßδ, π»αáó½∩εΘ¿Ñ Σπ¡¬µ¿«¡¿α«ó᡿Ѽ ΓÑନ¡á½∞¡δσ ½¿¡¿⌐,
- óσ«ñ∩Θ¿σ ó ß«ßΓáó ß¿ßΓѼδ. àß½¿ αÑú¿ßΓαᵿ∩ »«½∞º«óáΓѽ∩ »α«Φ½á πß»ÑΦ¡«,
- getty-»α«µÑßß, »α«⌐ñ∩ τÑαѺ »α«µÑñπαπ login, ºá»π߬áÑΓ ¡á ¿ß»«½¡Ñ¡¿Ñ αÑú¿ßΓ-
- αᵿ«¡¡δ⌐ shell (ß¼. ú½áóπ 10). ÆÑ¼ óαѼѡѼ »α«µÑßß init ¡áσ«ñ¿Γß∩ ó ß«ßΓ«-
- ∩¡¿¿ «ª¿ñá¡¿∩ (wait), ¡áí½εñá∩ ºá »αѬαáΘÑ¡¿Ñ¼ ßπΘÑßΓó«óá¡¿∩ ßó«¿σ »«Γ«¼¬«ó,
- á Γá¬ªÑ "ó¡πτáΓδσ" »α«µÑßß«ó, «ßΓáóΦ¿σß∩ "ß¿α«ΓἿ" »«ß½Ñ ú¿íѽ¿ ßó«¿σ α«ñ¿-
- ΓѽÑ⌐.
- Åα«µÑßßδ ó ß¿ßΓÑ¼Ñ UNIX ¼«úπΓ íδΓ∞ ½¿í« »«½∞º«óáΓѽ∞߬¿¼¿, ½¿í« π»αáó½∩-
- εΘ¿¼¿, ½¿í« ß¿ßΓѼ¡δ¼¿. ü«½∞Φ¿¡ßΓó« ¿º ¡¿σ ß«ßΓáó½∩εΓ »«½∞º«óáΓѽ∞߬¿Ñ »α«-
- µÑßßδ, ßó∩ºá¡¡δÑ ß »«½∞º«óáΓѽ∩¼¿ τÑαѺ ΓÑନ¡á½δ. ô»αáó½∩εΘ¿Ñ »α«µÑßßδ ¡Ñ
- ßó∩ºá¡δ ß ¬«¡¬αÑΓ¡δ¼¿ »«½∞º«óáΓѽ∩¼¿, «¡¿ óδ»«½¡∩εΓ Φ¿α«¬¿⌐ ߻ѬΓα ß¿ßΓѼ¡δσ
- Σπ¡¬µ¿⌐, Γᬿσ ¬á¬ áñ¼¿¡¿ßΓα¿α«óá¡¿Ñ ¿ π»αáó½Ñ¡¿Ñ ßÑΓ∩¼¿, αẽ¿τ¡δÑ »Ñα¿«ñ¿-
- τÑ߬¿Ñ «»Ñαᵿ¿, íπΣÑα¿ºáµ¿∩ ñá¡¡δσ ñ½∩ óδó«ñá ¡á πßΓα«⌐ßΓó« »«ßΓα«τ¡«⌐ »Ñ-
- τáΓ¿ ¿ Γ.ñ. Åα«µÑßß init ¼«ªÑΓ »«α«ªñáΓ∞ π»αáó½∩εΘ¿Ñ »α«µÑßßδ, ¬«Γ«αδÑ íπñπΓ
- ßπΘÑßΓó«óáΓ∞ ¡á »α«Γ∩ªÑ¡¿¿ óßÑú« óαѼѡ¿ ª¿º¡¿ ß¿ßΓѼδ, ó αẽ¿τ¡δσ ß½πτá∩σ
- «¡¿ ¼«úπΓ íδΓ∞ ß«ºñá¡δ ßἿ¼¿ »«½∞º«óáΓѽ∩¼¿. Ä¡¿ »«σ«ª¿ ¡á »«½∞º«óáΓѽ∞߬¿Ñ
- »α«µÑßßδ ΓѼ, τΓ« «¡¿ ¿ß»«½¡∩εΓß∩ ó αѪ¿¼Ñ ºáñáτ¿ ¿ »α¿íÑúáεΓ ¬ πß½πúá¼ ß¿ß-
- ΓÑ¼δ »πΓѼ ó맮óá ß««ΓóÑΓßΓóπεΘ¿σ ß¿ßΓѼ¡δσ Σπ¡¬µ¿⌐.
- æ¿ßΓѼ¡δÑ »α«µÑßßδ óδ»«½¡∩εΓß∩ ¿ß¬½ετ¿Γѽ∞¡« ó αѪ¿¼Ñ ∩ñαá. Ä¡¿ ¼«úπΓ
- »«α«ªñáΓ∞ß∩ ¡π½Ñóδ¼ »α«µÑßß«¼ (¡á»α¿¼Ñα, »α«µÑßß ºá¼ÑΘÑ¡¿∩ ßΓαá¡¿µ vhand),
- ¬«Γ«αδ⌐ ºáΓѼ ßΓá¡«ó¿Γß∩ »α«µÑßß«¼ »«ñ¬áτ¬¿. æ¿ßΓѼ¡δÑ »α«µÑßßδ »«σ«ª¿ ¡á
- π»αáó½∩εΘ¿Ñ »α«µÑßßδ ΓѼ, τΓ« «¡¿ óδ»«½¡∩εΓ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿, »α¿ φΓ«¼ «¡¿
- «í½áñáεΓ í«½∞Φ¿¼¿ 󫺼«ª¡«ßΓ∩¼¿ »α¿«α¿ΓÑΓ¡«ú« óδ»«½¡Ñ¡¿∩, »«ß¬«½∞¬π ½ÑªáΘ¿Ñ
- ó ¿σ «ß¡«óÑ »α«úαá¼¼¡δÑ ¬«ñδ ∩ó½∩εΓß∩ ß«ßΓáó¡«⌐ τáßΓ∞ε ∩ñαá. Ä¡¿ ¼«úπΓ «íαá-
- ΘáΓ∞ß∩ ¬ ßΓαπ¬Γπαá¼ ñá¡¡δσ ¿ á½ú«α¿Γ¼á¼ ∩ñαá, ¡Ñ »α¿íÑúá∩ ¬ ó맮óπ ß¿ßΓѼ¡δσ
- Σπ¡¬µ¿⌐, «Γßεñá óδΓѬáÑΓ ¿σ ¿ß¬½ετ¿Γѽ∞¡«ßΓ∞. Äñ¡á¬«, «¡¿ ¡Ñ «í½áñáεΓ Γᬫ⌐
-
- 222
-
- ┌────────────────────────────────────────────────────────────┐
- │ á½ú«α¿Γ¼ init /* »α«µÑßß init, ó ß¿ßΓÑ¼Ñ ¿¼Ñ¡πѼδ⌐ │
- │ "»α«µÑßß 1" */ │
- │ óσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ óδσ«ñ¡á∩ ¿¡Σ«α¼áµ¿∩: «ΓßπΓßΓóπÑΓ │
- │ { │
- │ fd = open("/etc/inittab",O_RDONLY); │
- │ while (line_read(fd,buffer)) │
- │ { │
- │ /* τ¿ΓáΓ∞ ¬áªñπε ßΓ᫬π Σá⌐½π */ │
- │ if (invoked state != buffer state) │
- │ continue; /* «ßΓáΓ∞ß∩ ó µ¿¬½Ñ while */ │
- │ /* ¡á⌐ñÑ¡ ¿ñÑ¡Γ¿Σ¿¬áΓ«α ß««ΓóÑΓßΓóπεΘÑú« ß«ßΓ«∩¡¿∩ │
- │ */ │
- │ if (fork() == 0) │
- │ { │
- │ execl("»α«µÑßß π¬áºá¡ ó íπΣÑαÑ"); │
- │ exit(); │
- │ } │
- │ /* »α«µÑßß init ¡Ñ ñ«ª¿ñáÑΓß∩ ºáóÑαΦÑ¡¿∩ »«Γ«¼¬á */ │
- │ /* ó«ºóαáΓ ó µ¿¬½ while */ │
- │ } │
- │ │
- │ while ((id = wait((int*) 0)) != -1) │
- │ { │
- │ /* »α«óÑα¬á ßπΘÑßΓó«óá¡¿∩ »«Γ«¼¬á; │
- │ * Ñß½¿ »«Γ«¼«¬ »αѬαáΓ¿½ ßπΘÑßΓó«óá¡¿Ñ, αáßß¼áΓα¿- │
- │ * óáÑΓß∩ 󫺼«ª¡«ßΓ∞ Ñú« »ÑαѺá»π߬á */ │
- │ /* ó »α«Γ¿ó¡«¼ ß½πτáÑ, «ß¡«ó¡«⌐ »α«µÑßß »α«ßΓ« »α«- │
- │ * ñ«½ªáÑΓ αáí«Γπ */ │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.31. ǽú«α¿Γ¼ óδ»«½¡Ñ¡¿∩ »α«µÑßßá init
-
- ┌────────────────────────────────────────────────────────────┐
- │ ö«α¼áΓ: ¿ñÑ¡Γ¿Σ¿¬áΓ«α, ß«ßΓ«∩¡¿Ñ, ñÑ⌐ßΓó¿Ñ, ߻ѵ¿Σ¿¬áµ¿∩ │
- │ »α«µÑßßá │
- │ Å«½∩ αáºñÑ½Ñ¡δ ¼Ñªñπ ß«í«⌐ ñó«ÑΓ«τ¿∩¼¿ │
- │ 諼¼Ñ¡Γáα¿¿ ó ¬«¡µÑ ßΓ᫬¿ ¡áτ¿¡áεΓß∩ ß ß¿¼ó«½á '#' │
- │ │
- │ co::respawn:/etc/getty console console #è«¡ß«½∞ ó ¼áΦºá½Ñ│
- │ 46:2:respawn:/etc/getty -t 60 tty46 4800H #¬«¼¼Ñ¡Γáα¿¿ │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.32. öαáú¼Ñ¡Γ Σá⌐½á inittab
-
- ªÑ ú¿í¬«ßΓ∞ε, ¬á¬ π»αáó½∩εΘ¿Ñ »α«µÑßßδ, »«ß¬«½∞¬π ñ½∩ Γ«ú«, τΓ«íδ ó¡ÑßΓ¿ ¿º-
- ¼Ñ¡Ñ¡¿∩ ó ¿σ »α«úαá¼¼δ, »α¿ñÑΓß∩ ÑΘÑ αẠ»ÑαѬ«¼»¿½¿α«óáΓ∞ ∩ñα«.
-
-
- E7.10 é¢éÄä¢F
-
- é ñá¡¡«⌐ ú½áóÑ í뫨 αáßß¼«ΓαÑ¡δ ß¿ßΓѼ¡δÑ Σπ¡¬µ¿¿, »αÑñ¡áº¡áτÑ¡¡δÑ ñ½∩
- αáí«Γδ ß ¬«¡ΓѬßΓ«¼ »α«µÑßßá ¿ ñ½∩ π»αáó½Ñ¡¿∩ óδ»«½¡Ñ¡¿Ñ¼ »α«µÑßßá. æ¿ßΓѼ-
- ¡á∩ Σπ¡¬µ¿∩ fork ß«ºñáÑΓ ¡«óδ⌐ »α«µÑßß, ¬«»¿απ∩ ñ½∩ ¡Ñú« ß«ñÑন¼«Ñ óßÑσ «í-
- ½áßΓÑ⌐, »«ñ¬½ετÑ¡¡δσ ¬ α«ñ¿Γѽ∞߬«¼π »α«µÑßßπ. Äß«íÑ¡¡«ßΓ∞ αÑ὿ºáµ¿¿ Σπ¡¬-
- µ¿¿ fork ß«ßΓ«¿Γ ó Γ«¼, τΓ« «¡á óδ»«½¡∩ÑΓ ¿¡¿µ¿á½¿ºáµ¿ε ß«σαá¡Ñ¡¡«ú« αÑú¿ßΓ-
-
- 223
-
- α«ó«ú« ¬«¡ΓѬßΓá »«α«ªñÑ¡¡«ú« »α«µÑßßá, Γᬿ¼ «íαẫ¼ φëà »α«µÑßß ¡áτ¿¡áÑΓ
- óδ»«½¡∩Γ∞ß∩, ¡Ñ ñ«ª¿ñá∩ß∞ ºáóÑαΦÑ¡¿∩ Σπ¡¬µ¿¿, ¿ πªÑ ó ΓÑ½Ñ Σπ¡¬µ¿¿ ¡áτ¿¡áÑΓ
- «ß«º¡áóáΓ∞ ßó«ε »αÑñ¡áº¡áτÑ¡¿Ñ ¬á¬ »«Γ«¼¬á. éßÑ »α«µÑßßδ ºáóÑαΦáεΓ ßó«Ñ óδ-
- »«½¡Ñ¡¿Ñ óδº«ó«¼ Σπ¡¬µ¿¿ exit, ¬«Γ«αá∩ «Γß«Ññ¿¡∩ÑΓ «í½áßΓ¿ »α«µÑßßá ¿ »«ßδ-
- ½áÑΓ Ñú« α«ñ¿Γѽε ß¿ú¡á½ "ú¿íѽ∞ »«Γ«¼¬á". Åα«µÑßß-α«ñ¿Γѽ∞ ¼«ªÑΓ ß«ó¼ÑßΓ¿Γ∞
- ¼«¼Ñ¡Γ »α«ñ«½ªÑ¡¿∩ ßó«Ñú« óδ»«½¡Ñ¡¿∩ ß ¼«¼Ñ¡Γ«¼ ºáóÑαΦÑ¡¿∩ »α«µÑßßá-»«Γ«¼¬á,
- ¿ß»«½∞ºπ∩ ß¿ßΓѼ¡πε Σπ¡¬µ¿ε wait. æ¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ exec ñáÑΓ »α«µÑßßπ ó«º-
- ¼«ª¡«ßΓ∞ ºá»π߬áΓ∞ ¡á óδ»«½¡Ñ¡¿Ñ ñαπú¿Ñ »α«úαá¼¼δ, ¡á¬½áñδóá∩ ß«ñÑন¼«Ñ ¿ß-
- »«½¡∩Ѽ«ú« Σá⌐½á ¡á ßó«Ñ áñαÑß¡«Ñ »α«ßΓαá¡ßΓó«. ƒñα« «Γß«Ññ¿¡∩ÑΓ «í½áßΓ¿,
- αá¡ÑÑ ºá¡¿¼áѼδÑ »α«µÑßß«¼, ¿ ¡áº¡áτáÑΓ »α«µÑßßπ ¡«óδÑ «í½áßΓ¿ ó ß««ΓóÑΓßΓ-
- ó¿¿ ß »«ΓαÑí¡«ßΓ∩¼¿ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á. æ«ó¼ÑßΓ¡«Ñ ¿ß»«½∞º«óá¡¿Ñ «í½áßΓÑ⌐
- ¬«¼á¡ñ ¿ ¡á½¿τ¿Ñ αѪ¿¼á "sticky-bit" ñáεΓ ó«º¼«ª¡«ßΓ∞ í«½ÑÑ αᵿ«¡á½∞¡« ¿ß-
- »«½∞º«óáΓ∞ »á¼∩Γ∞ ¿ φ¬«¡«¼¿Γ∞ óαѼ∩, ºáΓαáτ¿óáѼ«Ñ ¡á »«ñú«Γ«ó¬π ¬ ºá»π߬π
- »α«úαá¼¼. Åα«ßΓδ¼ »«½∞º«óáΓѽ∩¼ »αÑñ«ßΓáó½∩ÑΓß∩ 󫺼«ª¡«ßΓ∞ »«½πτáΓ∞ »α¿ó¿-
- ½Ñú¿¿ ñαπú¿σ »«½∞º«óáΓѽÑ⌐, ñáªÑ ßπ»Ñα»«½∞º«óáΓѽ∩, í½áú«ñáα∩ «íαáΘÑ¡¿ε ¬
- πß½πúá¼ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ setuid ¿ setuid-»α«úαá¼¼. æ »«¼«Θ∞ε Σπ¡¬µ¿¿ brk
- »α«µÑßß ¼«ªÑΓ ¿º¼Ñ¡∩Γ∞ αẼÑα ßó«Ñ⌐ «í½áßΓ¿ ñá¡¡δσ. öπ¡¬µ¿∩ signal ñáÑΓ »α«-
- µÑßßἠ󫺼«ª¡«ßΓ∞ π»αáó½∩Γ∞ ßó«Ñ⌐ αÑᬵ¿Ñ⌐ ¡á »«ßΓπ»áεΘ¿Ñ ß¿ú¡á½δ. Åα¿ »«-
- ½πτÑ¡¿¿ ß¿ú¡á½á »α«¿ºó«ñ¿Γß∩ «íαáΘÑ¡¿Ñ ¬ ߻ѵ¿á½∞¡«⌐ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú-
- ¡á½á ß ó¡ÑßÑ¡¿Ñ¼ ß««ΓóÑΓßΓóπεΘ¿σ ¿º¼Ñ¡Ñ¡¿⌐ ó ßΓѬ ºáñáτ¿ ¿ ó ß«σαá¡Ñ¡¡δ⌐ αÑ-
- ú¿ßΓα«óδ⌐ ¬«¡ΓѬßΓ ºáñáτ¿. Åα«µÑßßδ ¼«úπΓ ßἿ »«ßδ½áΓ∞ ß¿ú¡á½δ, ¿ß»«½∞ºπ∩
- ß¿ßΓѼ¡πε Σπ¡¬µ¿ε kill, «¡¿ ¼«úπΓ Γá¬ªÑ ¬«¡Γα«½¿α«óáΓ∞ »«½πτÑ¡¿Ñ ß¿ú¡á½«ó,
- »αÑñ¡áº¡áτÑ¡¡δσ úαπ»»Ñ »α«µÑßß«ó, »α¿íÑúá∩ ¬ πß½πúá¼ Σπ¡¬µ¿¿ setpgrp.
- 諼á¡ñ¡δ⌐ »α«µÑßß«α shell ¿ »α«µÑßß ¡áτá½∞¡«⌐ ºáúαπº¬¿ init ¿ß»«½∞ºπεΓ
- ßΓá¡ñáαΓ¡δÑ «íαáΘÑ¡¿∩ ¬ ß¿ßΓѼ¡δ¼ Σπ¡¬µ¿∩¼, »α«¿ºó«ñ∩ ¡áí«α «»Ñαᵿ⌐, ó ñαπ-
- ú¿σ ß¿ßΓѼáσ «íδτ¡« óδ»«½¡∩Ѽδσ ∩ñα«¼. Shell ¿¡ΓÑα»αÑΓ¿απÑΓ ¬«¼á¡ñδ »«½∞º«-
- óáΓѽ∩, »ÑαѡạáτáÑΓ ßΓá¡ñáαΓ¡δÑ Σá⌐½δ óó«ñá-óδó«ñá ñá¡¡δσ ¿ óδñáτ¿ «Φ¿í«¬,
- »«α«ªñáÑΓ »α«µÑßßδ, «αúá¡¿ºπÑΓ ¬á¡á½δ ¼Ñªñ𠻫᫪ñÑ¡¡δ¼¿ »α«µÑßßἿ, ß¿¡σα«-
- ¡¿º¿απÑΓ ßó«Ñ óδ»«½¡Ñ¡¿Ñ ß φΓ¿¼¿ »α«µÑßßἿ ¿ Σ«α¼¿απÑΓ ¬«ñδ, ó«ºóαáΘáѼδÑ
- ¬«¼á¡ñἿ. Åα«µÑßß init Γ«ªÑ »«α«ªñáÑΓ αẽ¿τ¡δÑ »α«µÑßßδ, ó τáßΓ¡«ßΓ¿, π»-
- αáó½∩εΘ¿Ñ αáí«Γ«⌐ »«½∞º«óáΓѽ∩ ºá ΓÑନ¡á½«¼. è«úñá Γᬫ⌐ »α«µÑßß ºáóÑαΦáÑΓ-
- ß∩, init ¼«ªÑΓ »«α«ñ¿Γ∞ ñ½∩ óδ»«½¡Ñ¡¿∩ Γ«⌐ ªÑ ßἫ⌐ Σπ¡¬µ¿¿ ÑΘÑ «ñ¿¡ »α«-
- µÑßß, Ñß½¿ φΓ« óδΓѬáÑΓ ¿º ¿¡Σ«α¼áµ¿¿ Σá⌐½á "/etc/inittab".
-
-
- E7.11 ôÅÉÇåìàìêƒF
-
- 1. çá»πßΓ¿ΓÑ ß ΓÑନ¡á½á »α«úαá¼¼π, »α¿óÑñÑ¡¡πε ¡á É¿ßπ¡¬Ñ 7.33. ÅÑαÑáñαÑ-
- ßπ⌐ΓÑ ßΓá¡ñáαΓ¡δ⌐ óδó«ñ ñá¡¡δσ ó Σá⌐½ ¿ ßαáó¡¿ΓÑ αѺπ½∞ΓáΓδ ¼Ñªñπ ß«-
- í«⌐.
- ┌────────────────────────────────────┐
- │ main() │
- │ { │
- │ printf("hello\n"); │
- │ if (fork() == 0) │
- │ printf("world\n"); │
- │ } │
- └────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.33. Åα¿¼Ñα ¼«ñπ½∩, ß«ñÑαªáΘÑú« ó맮ó Σπ¡¬µ¿¿ fork ¿ «íαá-
- ΘÑ¡¿Ñ ¬ ßΓá¡ñáαΓ¡«¼π óδó«ñπ
-
- 2. ÉáºíÑα¿ΓÑß∞ ó ¼Ñσá¡¿º¼Ñ αáí«Γδ »α«úαá¼¼δ, »α¿óÑñÑ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.34,
- ¿ ßαáó¡¿ΓÑ ÑÑ αѺπ½∞ΓáΓδ ß αѺπ½∞ΓáΓἿ »α«úαá¼¼δ ¡á É¿ßπ¡¬Ñ 7.4.
- 3. àΘÑ αẠ«íαáΓ¿¼ß∩ ¬ »α«úαá¼¼Ñ, »α¿óÑñÑ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.5 ¿ »«¬áºδóáε-
- ΘÑ⌐, ¬á¬ ñóá »α«µÑßßá «í¼Ñ¡¿óáεΓß∩ ß««íΘÑ¡¿∩¼¿, ¿ß»«½∞ºπ∩ ß»áαÑ¡¡δÑ ¬á-
- ¡á½δ. ùΓ« »α«¿º«⌐ñÑΓ, Ñß½¿ «¡¿ »«»δΓáεΓß∩ óÑßΓ¿ «í¼Ñ¡ ß««íΘÑ¡¿∩¼¿, ¿ß-
- »«½∞ºπ∩ «ñ¿¡ ¬á¡á½ ?
- 4. 髺¼«ª¡á ½¿ »«ΓÑα∩ ¿¡Σ«α¼áµ¿¿ ó ß½πτáÑ, ¬«úñá »α«µÑßß »«½πτáÑΓ ¡Ñ߬«½∞-
-
- 224
-
- ¬« ß¿ú¡á½«ó »αѪñÑ τѼ Ѽπ »αÑñ«ßΓáó½∩ÑΓß∩ 󫺼«ª¡«ßΓ∞ «ΓαÑáú¿α«óáΓ∞ ¡á
- ¡¿σ ¡áñ½ÑªáΘ¿¼ «íαẫ¼ ? (Éáßß¼«Γα¿ΓÑ ß½πτá⌐, ¬«úñá »α«µÑßß »«ñßτ¿Γδóá-
- ÑΓ ¬«½¿τÑßΓó« »«½πτÑ¡¡δσ ß¿ú¡á½«ó « »αÑαδóá¡¿¿.) àßΓ∞ ½¿ ¡Ñ«íσ«ñ¿¼«ßΓ∞
- ó αÑΦÑ¡¿¿ φΓ«⌐ »α«í½Ñ¼δ ?
- 5. Ä»¿Φ¿ΓÑ ¼Ñσá¡¿º¼ αáí«Γδ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ kill.
- 6. Åα«µÑßß ó »α«úαá¼¼Ñ ¡á É¿ßπ¡¬Ñ 7.35 »α¿¡¿¼áÑΓ ß¿ú¡á½δ Γ¿»á "ú¿íѽ∞ »«-
- Γ«¼¬á" ¿ πßΓá¡áó½¿óáÑΓ Σπ¡¬µ¿ε «íαáí«Γ¬¿ ß¿ú¡á½«ó ó ¿ßσ«ñ¡«Ñ ß«ßΓ«∩¡¿Ñ.
- ùΓ« »α«¿ßσ«ñ¿Γ »α¿ óδ»«½¡Ñ¡¿¿ »α«úαá¼¼δ ?
- 7. è«úñá »α«µÑßß »«½πτáÑΓ ß¿ú¡á½δ «»αÑñѽѡ¡«ú« Γ¿»á ¿ ¡Ñ «íαáíáΓδóáÑΓ ¿σ,
- ∩ñα« ñá¼»¿απÑΓ «íαẠ»α«µÑßßá ó Γ«¼ ó¿ñÑ, ¬«Γ«αδ⌐ íδ½ π ¡Ñú« ó ¼«¼Ñ¡Γ
- »«½πτÑ¡¿∩ ß¿ú¡á½á. ƒñα« ß«ºñáÑΓ ó ΓѬπΘѼ ¬áΓὫúÑ »α«µÑßßá Σá⌐½ ß ¿¼Ñ-
- ¡Ñ¼ "core" ¿ ¬«»¿απÑΓ ó ¡Ñú« »α«ßΓαá¡ßΓó« »α«µÑßßá, «í½áßΓ¿ ¬«¼á¡ñ,
- ñá¡¡δσ ¿ ßΓѬá. 黫߽ÑñßΓó¿¿ »«½∞º«óáΓѽ∞ ¼«ªÑΓ ΓΘáΓѽ∞¡« ¿ºπτ¿Γ∞ ñá¼»
- «íαáºá »α«µÑßßá ß »«¼«Θ∞ε ßΓá¡ñáαΓ¡δσ ßαÑñßΓó «Γ½áñ¬¿. Ä»¿Φ¿ΓÑ á½ú«-
- α¿Γ¼, ¬«Γ«α«¼π ¡á éáΦ óºú½∩ñ ñ«½ª¡« ß½Ññ«óáΓ∞ ∩ñα« ó »α«µÑßßÑ ß«ºñá¡¿∩
- Σá⌐½á "core". ùΓ« ¡πª¡« »αÑñ»α¿¡∩Γ∞ ó Γ«¼ ß½πτáÑ, Ñß½¿ ó ΓѬπΘѼ ¬áΓá-
- ½«úÑ Σá⌐½ ß Γᬿ¼ ¿¼Ñ¡Ñ¼ πªÑ ßπΘÑßΓóπÑΓ ? èᬠñ«½ª¡« óÑßΓ¿ ßÑí∩ ∩ñα«,
- ¬«úñá ó «ñ¡«¼ ¿ Γ«¼ ªÑ ¬áΓὫúÑ ñá¼»¿απεΓ ßó«¿ «íαáºδ ßαáºπ ¡Ñ߬«½∞¬«
- »α«µÑßß«ó?
- 8. àΘÑ αẠ«íαáΓ¿¼ß∩ ¬ »α«úαá¼¼Ñ (É¿ßπ¡«¬ 7.12), «»¿ßδóáεΘÑ⌐, ¬á¬ «ñ¿¡
- »α«µÑßß ºáíαáßδóáÑΓ ñαπú«⌐ »α«µÑßß ß¿ú¡á½á¼¿, ¬«Γ«αδÑ »α¿¡¿¼áεΓß∩ ¿σ
- áñαÑßáΓ«¼. Å«ñπ¼á⌐ΓÑ, τΓ« »α«¿º«Φ½« íδ ó Γ«¼ ß½πτáÑ, Ñß½¿ íδ á½ú«α¿Γ¼
- «íαáí«Γ¬¿ ß¿ú¡á½«ó íδ½ »ÑαÑαáí«Γá¡ ó ½εí«¼ ¿º ß½ÑñπεΘ¿σ ¡á»αáó½Ñ¡¿⌐:
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <fcntl.h> │
- │ int fdrd,fdwt; │
- │ char c; │
- │ │
- │ main(argc,argv) │
- │ int argc; │
- │ char *argv[]; │
- │ { │
- │ if (argc != 3) │
- │ exit(1); │
- │ fork(); │
- │ │
- │ if ((fdrd = open(argv[1],O_RDONLY)) == -1) │
- │ exit(1); │
- │ if (((fdwt = creat(argv[2],0666)) == -1) && │
- │ ((fdwt = open(argv[2],O_WRONLY)) == -1)) │
- │ exit(1); │
- │ rdwrt(); │
- │ } │
- │ rdwrt() │
- │ { │
- │ for (;;) │
- │ { │
- │ if (read(fdrd,&c,1) != 1) │
- │ return; │
- │ write(fdwt,&c,1); │
- │ } │
- │ } │
- └────────────────────────────────────────────────────────────┘
- É¿ßπ¡«¬ 7.34. Åα¿¼Ñα »α«úαá¼¼δ, ó ¬«Γ«α«⌐ »α«µÑßß-α«ñ¿Γѽ∞ ¿
- »α«µÑßß-»«Γ«¼«¬ ¡Ñ αáºñѽ∩εΓ ñ«ßΓπ» ¬ Σá⌐½π
-
- * ∩ñα« ¡Ñ ºá¼Ñ¡∩ÑΓ Σπ¡¬µ¿ε «íαáí«Γ¬¿ ß¿ú¡á½«ó ñ« ΓÑσ »«α, »«¬á »«½∞º«-
- óáΓѽ∞ ∩ó¡« ¡Ñ »«ΓαÑíπÑΓ φΓ«ú«;
-
- 225
-
- * ∩ñα« ºáßΓáó½∩ÑΓ »α«µÑßß ¿ú¡«α¿α«óáΓ∞ ß¿ú¡á½δ ñ« ΓÑσ »«α, »«¬á »«½∞º«-
- óáΓѽ∞ ¡Ñ «íαáΓ¿Γß∩ ¬ Σπ¡¬µ¿¿ signal ó¡«ó∞.
- 9. ÅÑαÑαáí«Γá⌐ΓÑ á½ú«α¿Γ¼ «íαáí«Γ¬¿ ß¿ú¡á½«ó Γá¬, τΓ«íδ ∩ñα« áóΓ«¼áΓ¿τÑ߬¿
- »ÑαÑ¡áßΓαá¿óὫ »α«µÑßß ¡á ¿ú¡«α¿α«óá¡¿Ñ óßÑσ »«ß½ÑñπεΘ¿σ »«ßΓπ»½Ñ¡¿⌐
- ß¿ú¡á½«ó »« ó«ºóαáΘÑ¡¿¿ ¿º Σπ¡¬µ¿¿, «íαáíáΓδóáεΘÑ⌐ ¿σ. èᬿ¼ «íαẫ¼
- ∩ñα« ¼«ªÑΓ πº¡áΓ∞ « ºáóÑαΦÑ¡¿¿ Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½«ó, óδ»«½¡∩εΘÑ⌐-
- ß∩ ó αѪ¿¼Ñ ºáñáτ¿ ? Æá¬«ú« α«ñá »ÑαÑ¡áßΓα«⌐¬á »α¿í½¿º¿½á íδ ¡áß ¬
- Γαá¬Γ«ó¬Ñ ß¿ú¡á½«ó ó ß¿ßΓÑ¼Ñ BSD.
- *10. àß½¿ »α«µÑßß »«½πτáÑΓ ß¿ú¡á½, ¡áσ«ñ∩ß∞ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá ó« óαѼ∩
- óδ»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ß ñ«»π߬áεΘ¿¼ »αÑαδóá¡¿∩ »α¿«α¿ΓÑΓ«¼, «¡
- óδσ«ñ¿Γ ¿º Σπ¡¬µ¿¿ »« á½ú«α¿Γ¼π longjump. ƒñα« »α«¿ºó«ñ¿Γ ¡Ñ«íσ«ñ¿¼δÑ
- πßΓá¡«ó¬¿ ñ½∩ ºá»π߬á Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á; ¬«úñá »α«µÑßß óδ⌐ñÑΓ
- ¿º Σπ¡¬µ¿¿ «íαáí«Γ¬¿ ß¿ú¡á½á, ó óÑαß¿¿ V φΓ« íπñÑΓ óδú½∩ñÑΓ∞ Γá¬, ß½«ó-
- ¡« «¡ óÑα¡π½ß∩ ¿º ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ß »α¿º¡á¬«¼ «Φ¿í¬¿ (¬á¬ íδ »αÑαóáó
- ßó«Ñ óδ»«½¡Ñ¡¿Ñ). é ß¿ßΓÑ¼Ñ BSD ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ ó φΓ«¼ ß½πτáÑ áóΓ«¼á-
- Γ¿τÑ߬¿ »ÑαѺá»π߬áÑΓß∩. èᬿ¼ «íαẫ¼ ¼«ª¡« αÑ὿º«óáΓ∞ φëà ¼«¼Ñ¡Γ ó
- ¡áΦÑ⌐ ß¿ßΓѼÑ?
-
- ┌────────────────────────────────────────────────────────────┐
- │ #include <signal.h> │
- │ main() │
- │ { │
- │ extern catcher(); │
- │ │
- │ signal(SIGCLD,catcher); │
- │ if (fork() == 0) │
- │ exit(); │
- │ /* »áπºá ñ« ¼«¼Ñ¡Γá »«½πτÑ¡¿∩ ß¿ú¡á½á */ │
- │ pause(); │
- │ } │
- │ │
- │ catcher() │
- │ { │
- │ printf("»α«µÑßß-α«ñ¿Γѽ∞ »«½πτ¿½ ß¿ú¡á½\n"); │
- │ signal(SIGCLD,catcher); │
- │ } │
- └────────────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.35. Åα«úαá¼¼á, ó ¬«Γ«α«⌐ »α«µÑßß »α¿¡¿¼áÑΓ ß¿ú¡á½δ
- Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á"
-
- 11. é Γαáñ¿µ¿«¡¡«⌐ αÑ὿ºáµ¿¿ ¬«¼á¡ñδ mkdir ñ½∩ ß«ºñá¡¿∩ ¡«ó«⌐ óÑαΦ¿¡δ ó
- ñÑαÑóÑ ¬áΓὫú«ó ¿ß»«½∞ºπÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ mknod, »«ß½Ñ τÑú« ñóáª-
- ñδ óδºδóáÑΓß∩ ß¿ßΓѼ¡á∩ Σπ¡¬µ¿∩ link, »α¿ó∩ºδóáεΘá∩ Γ«τ¬¿ óσ«ñá ó ¬áΓá-
- ½«ú ß ¿¼Ñ¡á¼¿ "." ¿ ".." ¬ ¡«ó«⌐ óÑαΦ¿¡Ñ ¿ ¬ ÑÑ α«ñ¿Γѽ∞߬«¼π ¬áΓὫúπ.
- üѺ φΓ¿σ ΓαÑσ «»Ñαᵿ⌐ ¬áΓὫú ¡Ñ íπñÑΓ ¿¼ÑΓ∞ ¡áñ½ÑªáΘ¿⌐ Σ«α¼áΓ. ùΓ«
- »α«¿º«⌐ñÑΓ, Ñß½¿ ó« óαѼ∩ ¿ß»«½¡Ñ¡¿∩ ¬«¼á¡ñδ mkdir »α«µÑßß »«½πτ¿Γ ß¿ú-
- ¡á½ ? ùΓ« Ñß½¿ »α¿ φΓ«¼ íπñÑΓ »«½πτÑ¡ ß¿ú¡á½ SIGKILL, ¬«Γ«αδ⌐ »α«µÑßß
- ¡Ñ αáß»«º¡áÑΓ ? ¥Γπ ªÑ »α«í½Ñ¼π αáßß¼«Γα¿ΓÑ »α¿¼Ñ¡¿Γѽ∞¡« ¬ αÑ὿ºáµ¿¿
- ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ mkdir.
- 12. Åα«µÑßß »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ ß¿ú¡á½«ó ó ¼«¼Ñ¡Γδ »ÑαÑσ«ñá ó ß«ßΓ«∩¡¿Ñ »α¿-
- «ßΓá¡«óá ¿ óδσ«ñá ¿º ¡Ñú« (Ñß½¿ ó ß«ßΓ«∩¡¿¿ »α¿«ßΓá¡«óá »α«µÑßß ¡áσ«-
- ñ¿½ß∩ ß »α¿«α¿ΓÑΓ«¼, ñ«»π߬áεΘ¿¼ »αÑαδóá¡¿∩), á Γá¬ªÑ ó ¼«¼Ñ¡Γ »ÑαÑσ«ñá
- ó αѪ¿¼ ºáñáτ¿ ¿º αѪ¿¼á ∩ñαá »« ºáóÑαΦÑ¡¿¿ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬-
- µ¿¿ ¿½¿ »«ß½Ñ «íαáí«Γ¬¿ »αÑαδóá¡¿∩. Å«τѼπ »α«µÑßß ¡Ñ »α«óÑα∩ÑΓ ¡á½¿τ¿Ñ
- ß¿ú¡á½«ó ó ¼«¼Ñ¡Γ «íαáΘÑ¡¿∩ ¬ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ ?
- *13. ÅαÑñ»«½«ª¿¼, τΓ« »«ß½Ñ ¿ß»«½¡Ñ¡¿∩ ß¿ßΓѼ¡«⌐ Σπ¡¬µ¿¿ »α«µÑßß ú«Γ«ó¿Γß∩ ¬
- ó«ºóαáΘÑ¡¿ε ó αѪ¿¼ ºáñáτ¿ ¿ ¡Ñ «í¡áαπª¿óáÑΓ ¡¿ «ñ¡«ú« ¡Ñ«íαáí«Γá¡¡«ú«
- ß¿ú¡á½á. æαáºπ »«ß½Ñ φΓ«ú« ∩ñα« «íαáíáΓδóáÑΓ »αÑαδóá¡¿Ñ ¿ »«ßδ½áÑΓ »α«-
-
- 226
-
- µÑßßπ ß¿ú¡á½. (ìá»α¿¼Ñα, »«½∞º«óáΓѽѼ íδ½á ¡áªáΓá ¬½áó¿Φá "break".)
- ùΓ« ñѽáÑΓ »α«µÑßß »«ß½Ñ Γ«ú«, ¬á¬ ∩ñα« ºáóÑαΦáÑΓ «íαáí«Γ¬π »αÑαδóá¡¿∩?
- *14. àß½¿ »α«µÑßßπ «ñ¡«óαѼѡ¡« »«ßδ½áÑΓß∩ ¡Ñ߬«½∞¬« ß¿ú¡á½«ó, ∩ñα« «íαáíá-
- ΓδóáÑΓ ¿σ ó Γ«¼ »«α∩ñ¬Ñ, ó ¬á¬«¼ «¡¿ »ÑαÑτ¿ß½Ñ¡δ ó «»¿ßá¡¿¿. æπΘÑßΓóπεΓ
- Γα¿ ß»«ß«íá αÑáú¿α«óá¡¿∩ ¡á »«½πτÑ¡¿Ñ ß¿ú¡á½á - »α¿Ñ¼ ß¿ú¡á½«ó, ºáóÑα-
- ΦÑ¡¿Ñ óδ»«½¡Ñ¡¿∩ ß« ßíα«ß«¼ ¡á ó¡ÑΦ¡¿⌐ ¡«ß¿Γѽ∞ (ñá¼»¿α«ó᡿Ѽ) «íαáºá
- »α«µÑßßá ó »á¼∩Γ¿ ¿ ºáóÑαΦÑ¡¿Ñ óδ»«½¡Ñ¡¿∩ íѺ ñá¼»¿α«óá¡¿∩. ¡« ½¿
- π¬áºáΓ∞ ¡á¿½πτΦ¿⌐ »«α∩ñ«¬ «íαáí«Γ¬¿ «ñ¡«óαѼѡ¡« »«ßΓπ»áεΘ¿σ ß¿ú¡á½«ó ?
- ìá»α¿¼Ñα, Ñß½¿ »α«µÑßß »«½πτáÑΓ ß¿ú¡á½ « óδσ«ñÑ (óδºδóáεΘ¿⌐ ñá¼»¿α«óá-
- ¡¿Ñ «íαáºá »α«µÑßßá ó »á¼∩Γ¿) ¿ ß¿ú¡á½ « »αÑαδóá¡¿¿ (óδσ«ñ íѺ ñá¼»¿α«-
- óá¡¿∩), Γ« ¬á¬«⌐ ¿º φΓ¿σ ß¿ú¡á½«ó ¿¼Ñ½« íδ ß¼δß½ «íαáí«ΓáΓ∞ »Ñαóδ¼ ?
- 15. çừ¼¡¿ΓÑ ¡«óπε ß¿ßΓѼ¡πε Σπ¡¬µ¿ε newpgrp(pid,ngrp);
- ¬«Γ«αá∩ ó¬½ετáÑΓ »α«µÑßß ß ¿ñÑ¡Γ¿Σ¿¬áΓ«α«¼ pid ó úαπ»»π »α«µÑßß«ó ß ¡«-
- ¼Ñα«¼ ngrp (πßΓá¡áó½¿óáÑΓ ñ½∩ »α«µÑßßá ¡«óπε úαπ»»π). Å«ñπ¼á⌐ΓÑ, ñ½∩
- ¬á¬¿σ µÑ½Ñ⌐ «¡á ¼«ªÑΓ ¿ß»«½∞º«óáΓ∞ß∩ ¿ ¬á¬¿Ñ «»áß¡«ßΓ¿ Γá¿Γ ó ßÑíÑ ÑÑ
- ó맮ó.
- 16. Å᫬«¼¼Ñ¡Γ¿απ⌐ΓÑ ß½ÑñπεΘÑÑ πΓóÑαªñÑ¡¿Ñ: »« á½ú«α¿Γ¼π wait »α«µÑßß ¼«ªÑΓ
- »α¿«ßΓá¡«ó¿Γ∞ß∩ ñ« ¡áßΓπ»½Ñ¡¿∩ ¬á¬«ú«-½¿í« ß«íδΓ¿∩ ¿ φΓ« ¡Ñ «Γαế½«ß∞
- íδ ¡á αáí«ΓÑ óßÑ⌐ ß¿ßΓѼδ.
- 17. Éáßß¼«Γα¿¼ ¡«óπε ß¿ßΓѼ¡πε Σπ¡¬µ¿ε
- nowait(pid);
- úñÑ pid - ¿ñÑ¡Γ¿Σ¿¬áΓ«α »α«µÑßßá, ∩ó½∩εΘÑú«ß∩ »«Γ«¼¬«¼ Γ«ú« »α«µÑßßá,
- ¬«Γ«αδ⌐ óδºδóáÑΓ Σπ¡¬µ¿ε. éδºδóá∩ Σπ¡¬µ¿ε, »α«µÑßß ΓѼ ßá¼δ¼ ß««íΘáÑΓ
- ∩ñαπ « Γ«¼, τΓ« «¡ ¡Ñ ß«í¿αáÑΓß∩ ñ«ª¿ñáΓ∞ß∩ ºáóÑαΦÑ¡¿∩ óδ»«½¡Ñ¡¿∩ ßó«Ñ-
- ú« »«Γ«¼¬á, »«φΓ«¼π ∩ñα« ¼«ªÑΓ »« «¬«¡τá¡¿¿ ßπΘÑßΓó«óá¡¿∩ »«Γ«¼¬á ßαáºπ
- ªÑ «τ¿ßΓ¿Γ∞ ºá¡¿¼áѼ«Ñ ¿¼ ¼ÑßΓ« ó Γáí½¿µÑ »α«µÑßß«ó. èᬿ¼ «íαẫ¼ φΓ«
- αÑ὿ºπÑΓß∩ ¡á »αá¬Γ¿¬Ñ ? ĵѡ¿ΓÑ ñ«ßΓ«¿¡ßΓóá ¡«ó«⌐ Σπ¡¬µ¿¿ ¿ ßαáó¡¿ΓÑ
- ÑÑ ¿ß»«½∞º«óá¡¿Ñ ß ¿ß»«½∞º«ó᡿Ѽ ß¿ú¡á½«ó Γ¿»á "ú¿íѽ∞ »«Γ«¼¬á".
- 18. çáúαπºτ¿¬ ¼«ñπ½Ñ⌐ ¡á æ¿ áóΓ«¼áΓ¿τÑ߬¿ »«ñ¬½ετáÑΓ ¬ «ß¡«ó¡«¼π ¼«ñπ½ε ¡á-
- τá½∞¡πε »α«µÑñπαπ (startup), ¬«Γ«αá∩ óδºδóáÑΓ Σπ¡¬µ¿ε main, »α¿¡áñ½Ñªá-
- Θπε »α«úαá¼¼Ñ »«½∞º«óáΓѽ∩. àß½¿ ó »«½∞º«óáΓѽ∞߬«⌐ »α«úαá¼¼Ñ «ΓßπΓßΓ-
- óπÑΓ ó맮ó Σπ¡¬µ¿¿ exit, »α«µÑñπαá startup ßá¼á óδºδóáÑΓ φΓπ Σπ¡¬µ¿ε
- »α¿ óδσ«ñÑ ¿º Σπ¡¬µ¿¿ main. ùΓ« »α«¿º«Φ½« íδ ó Γ«¼ ß½πτáÑ, Ñß½¿ íδ ¿ ó
- »α«µÑñπαÑ startup «ΓßπΓßΓó«óá½ ó맮ó Σπ¡¬µ¿¿ exit (¿º-ºá «Φ¿í¬¿ ºáúαπº-
- τ¿¬á) ?
- 19. èá¬πε ¿¡Σ«α¼áµ¿ε »«½πτ¿Γ »α«µÑßß, óδ»«½¡∩εΘ¿⌐ Σπ¡¬µ¿ε wait, Ñß½¿ Ñú«
- »«Γ«¼«¬ ºá»πßΓ¿Γ Σπ¡¬µ¿ε exit íѺ »áαá¼ÑΓαá ? ê¼ÑÑΓß∩ ó ó¿ñπ, τΓ« »α«-
- µÑßß-»«Γ«¼«¬ ó맮óÑΓ Σπ¡¬µ¿ε ó Σ«α¼áΓÑ exit() ó¼ÑßΓ« exit(n). àß½¿
- »α«úαá¼¼¿ßΓ »«ßΓ«∩¡¡« ¿ß»«½∞ºπÑΓ ó맮ó Σπ¡¬µ¿¿ exit íѺ »áαá¼ÑΓαá, Γ«
- ¡á߬«½∞¬« »αÑñ߬áºπѼ« º¡áτÑ¡¿Ñ, «ª¿ñáѼ«Ñ Σπ¡¬µ¿Ñ⌐ wait ? 䫬ᪿΓÑ
- ßó«⌐ «ΓóÑΓ.
- 20. ÄíΩ∩ß¡¿ΓÑ, τΓ« »α«¿º«⌐ñÑΓ, Ñß½¿ »α«µÑßß, ¿ß»«½¡∩εΘ¿⌐ »α«úαá¼¼π ¡á É¿-
- ßπ¡¬Ñ 7.36 ºá»πßΓ¿Γ ß »«¼«Θ∞ε Σπ¡¬µ¿¿ exec ßἫú« ßÑí∩. èᬠó Γᬫ¼
- ß½πτáÑ ∩ñα« ß¼«ªÑΓ ¿ºíѪáΓ∞ 󫺡¿¬¡«óÑ¡¿∩ Γπ»¿¬«óδσ ß¿Γπᵿ⌐, ßó∩ºá¡¡δσ
- ß í½«¬¿α«ó¬«⌐ ¿¡ñѬ߫ó ?
- ┌──────────────────────────────────┐
- │ main(argc,argv) │
- │ int argc; │
- │ char *argv[]; │
- │ { │
- │ execl(argv[0],argv[0],0); │
- │ } │
- └──────────────────────────────────┘
- É¿ßπ¡«¬ 7.36
-
- 21. Å« πß½«ó¿ε »Ñαóδ¼ áαúπ¼Ñ¡Γ«¼ Σπ¡¬µ¿¿ exec ∩ó½∩ÑΓß∩ ¿¼∩ (»«ß½Ññ¡∩∩ ¬«¼-
- »«¡Ñ¡Γá ¿¼Ñ¡¿ »πΓ¿ »«¿ß¬á) ¿ß»«½¡∩Ѽ«ú« »α«µÑßß«¼ Σá⌐½á. ùΓ« »α«¿º«⌐ñÑΓ
- ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ, »α¿óÑñÑ¡¡«⌐ ¡á É¿ßπ¡¬Ñ 7.37 ? èᬫó
- íπñÑΓ φΣΣѬΓ, Ñß½¿ ó ¬áτÑßΓóÑ Σá⌐½á "a.out" óδßΓπ»¿Γ ºáúαπº«τ¡δ⌐ ¼«-
-
- 227
-
- ñπ½∞, »«½πτÑ¡¡δ⌐ ó αѺπ½∞ΓáΓÑ Γαá¡ß½∩µ¿¿ »α«úαá¼¼δ, »α¿óÑñÑ¡¡«⌐ ¡á É¿-
- ßπ¡¬Ñ 7.36 ?
- 22. ÅαÑñ»«½«ª¿¼, τΓ« ó ∩ºδ¬Ñ æ¿ »«ññÑনóáÑΓß∩ ¡«óδ⌐ Γ¿» ñá¡¡δσ "read-only"
- (Γ«½∞¬« ñ½∩ τΓÑ¡¿∩), »α¿τѼ »α«µÑßß, »δΓáεΘ¿⌐ß∩ ºá»¿ßáΓ∞ ¿¡Σ«α¼áµ¿ε ó
- »«½Ñ ß φΓ¿¼ Γ¿»«¼, »«½πτáÑΓ «Γ¬áº ß¿ßΓÑ¼δ ºáΘ¿Γδ. Ä»¿Φ¿ΓÑ αÑ὿ºáµ¿ε
- φΓ«ú« ¼«¼Ñ¡Γá. (ìá¼Ñ¬: ßαáó¡¿ΓÑ φΓ« »«¡∩Γ¿Ñ ß »«¡∩Γ¿Ñ¼ "αáºñѽ∩Ѽá∩ «í-
- ½áßΓ∞ ¬«¼á¡ñ".) é ¬á¬¿Ñ ¿º á½ú«α¿Γ¼«ó ∩ñαá »«ΓαÑíπÑΓß∩ ó¡ÑßΓ¿ ¿º¼Ñ¡Ñ¡¿∩
- ? èá¬¿Ñ ÑΘÑ «íΩѬΓδ ¼«úπΓ íδΓ∞ αÑ὿º«óá¡δ á¡á½«ú¿τ¡δ¼ ß «í½áßΓ∞ε «íαá-
- º«¼ ?
- 23. èá¬¿Ñ ¿º¼Ñ¡Ñ¡¿∩ ¿¼ÑεΓ ¼ÑßΓ« ó á½ú«α¿Γ¼áσ open, chmod, unlink ¿ unmount
- »α¿ αáí«ΓÑ ß Σá⌐½á¼¿, ñ½∩ ¬«Γ«αδσ πßΓá¡«ó½Ñ¡ αѪ¿¼ "sticky-bit" ? èᬿÑ
- ñÑ⌐ßΓó¿∩, ¡á»α¿¼Ñα, ß½ÑñπÑΓ »αÑñ»α¿¡∩Γ∞ ó «Γ¡«ΦÑ¡¿¿ Γᬫú« Σá⌐½á ∩ñαπ,
- ¬«úñá ß Σá⌐½«¼ αáºαδóáÑΓß∩ ßó∩º∞ ?
- 24. æπ»Ñα»«½∞º«óáΓѽ∞ ∩ó½∩ÑΓß∩ Ññ¿¡ßΓóÑ¡¡δ¼ »«½∞º«óáΓѽѼ, ¿¼ÑεΘ¿¼ »αáó« ¡á
- ºá»¿ß∞ ó Σá⌐½ »áα«½Ñ⌐ "/etc/passwd", í½áú«ñáα∩ τѼπ ß«ñÑন¼«Ñ Σá⌐½á
- »αÑñ«σαá¡∩ÑΓß∩ «Γ π¼δΦ½Ñ¡¡«⌐ ¿½¿ ß½πτá⌐¡«⌐ »«ατ¿. Åα«úαá¼¼á passwd ñáÑΓ
- »«½∞º«óáΓѽ∩¼ 󫺼«ª¡«ßΓ∞ ¿º¼Ñ¡∩Γ∞ ßó«⌐ ß«íßΓóÑ¡¡δ⌐ »áα«½∞, ºáΘ¿Θá∩ «Γ
- ¿º¼Ñ¡Ñ¡¿⌐ τπª¿Ñ ºá»¿ß¿. èᬿ¼ «íαẫ¼ «¡á αáí«ΓáÑΓ ?
-
- ┌─────────────────────────────────────────────────────┐
- │ main() │
- │ { │
- │ if (fork() == 0) │
- │ { │
- │ execl("a.out",0); │
- │ printf("¡Ñπñáτ¡«Ñ ºáóÑαΦÑ¡¿Ñ Σπ¡¬µ¿¿ exec\n");│
- │ } │
- │ } │
- └─────────────────────────────────────────────────────┘
- É¿ßπ¡«¬ 7.37
-
-
- *25. Å«∩ß¡¿ΓÑ, ¬á¬á∩ πú஧á íѺ«»áß¡«ßΓ¿ σαá¡Ñ¡¿∩ ñá¡¡δσ 󫺡¿¬áÑΓ, Ñß½¿
- setuid-»α«úαá¼¼á ¡Ñ ºáΘ¿ΘÑ¡á «Γ ºá»¿ß¿.
- 26. éδ»«½¡¿ΓÑ ß½ÑñπεΘπε »«ß½Ññ«óáΓѽ∞¡«ßΓ∞ ¬«¼á¡ñ, ó ¬«Γ«α«⌐ "a.
- out" - ¿¼∩ ¿ß»«½¡∩Ѽ«ú« Σá⌐½á:
-
- ┌─────────────────────────────────────────────────────┐
- │ main() │
- │ { │
- │ char *endpt; │
- │ char *sbrk(); │
- │ int brk(); │
- │ │
- │ endpt = sbrk(0); │
- │ printf("endpt = %ud »«ß½Ñ sbrk\n", (int) endpt); │
- │ │
- │ while (endpt--) │
- │ { │
- │ if (brk(endpt) == -1) │
- │ { │
- │ printf("brk ß »áαá¼ÑΓα«¼ %ud ºáóÑαΦ¿½áß∞ │
- │ ¡Ñπñáτ¡«\n",endpt); │
- │ exit(); │
- │ } │
- │ } │
- │ } │
- └─────────────────────────────────────────────────────┘
- É¿ßπ¡«¬ 7.38
-
- 228
-
- chmod 4777 a.out
- chown root a.out
- 諼á¡ñá chmod "ó¬½ετáÑΓ" í¿Γ setuid (4 ó 4777); »«½∞º«óáΓѽ∞ "root"
- Γαáñ¿µ¿«¡¡« ∩ó½∩ÑΓß∩ ßπ»Ñα»«½∞º«óáΓѽѼ. ÑΓ ½¿ ó αѺπ½∞ΓáΓÑ óδ»«½¡Ñ-
- ¡¿∩ φΓ«⌐ »«ß½Ññ«óáΓѽ∞¡«ßΓ¿ »α«¿º«⌐Γ¿ ¡áαπΦÑ¡¿Ñ ºáΘ¿Γδ ¿¡Σ«α¼áµ¿¿ ?
- 27. ùΓ« »α«¿º«⌐ñÑΓ ó »α«µÑßßÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿-
- ßπ¡¬Ñ 7.38 ? Å«∩ß¡¿ΓÑ ßó«⌐ «ΓóÑΓ.
- 28. ü¿í½¿«ΓÑτ¡á∩ »«ñ»α«úαá¼¼á malloc πóѽ¿τ¿óáÑΓ «í½áßΓ∞ ñá¡¡δσ »α«µÑßßá ß
- »«¼«Θ∞ε Σπ¡¬µ¿¿ brk, á »«ñ»α«úαá¼¼á free «ßó«í«ªñáÑΓ »á¼∩Γ∞, óδñѽѡ¡πε
- »«ñ»α«úαá¼¼«⌐ malloc. æ¿¡Γá¬ß¿ß ó맮óá »«ñ»α«úαá¼¼:
-
- ptr = malloc(size);
- free(ptr);
-
- úñÑ size - µÑ½«Ñ τ¿ß½« íѺ º¡á¬á, «í«º¡áτáεΘÑÑ ¬«½¿τÑßΓó« óδñѽ∩Ѽδσ
- íá⌐Γ »á¼∩Γ¿, á ptr - ß¿¼ó«½∞¡á∩ ßßδ½¬á ¡á ó¡«ó∞ óδñѽѡ¡«Ñ »α«ßΓαá¡ßΓ-
- ó«. ÅαѪñÑ τѼ »«∩ó¿Γ∞ß∩ ó ¬áτÑßΓóÑ »áαá¼ÑΓαá ó ó맮óÑ »«ñ»α«úαá¼¼δ
- free, π¬áºáΓѽ∞ ptr ñ«½ªÑ¡ íδΓ∞ ó«ºóαáΘÑ¡ »«ñ»α«úαá¼¼«⌐ malloc. éδ»«½-
- ¡¿ΓÑ φΓ¿ »«ñ»α«úαá¼¼δ.
- 29. ùΓ« »α«¿º«⌐ñÑΓ ó »α«µÑßßÑ óδ»«½¡Ñ¡¿∩ »α«úαá¼¼δ, »αÑñßΓáó½Ñ¡¡«⌐ ¡á É¿-
- ßπ¡¬Ñ 7.39 ? æαáó¡¿ΓÑ αѺπ½∞ΓáΓδ óδ»«½¡Ñ¡¿∩ φΓ«⌐ »α«úαá¼¼δ ß αѺπ½∞Γá-
- ΓἿ, »αÑñπß¼«ΓαÑ¡¡δ¼¿ ó ß¿ßΓѼ¡«¼ «»¿ßá¡¿¿.
-
- ┌─────────────────────────────────────────────────────┐
- │ main() │
- │ { │
- │ int i; │
- │ char *cp; │
- │ extern char *sbrk(); │
- │ │
- │ cp = sbrk(10); │
- │ for (i = 0; i < 10; i++) │
- │ *cp++ = 'a' + i; │
- │ sbrk(-10); │
- │ cp = sbrk(10); │
- │ for (i = 0; i < 10; i++) │
- │ printf("char %d = '%c'\n",i,*cp++); │
- │ } │
- └─────────────────────────────────────────────────────┘
-
- É¿ßπ¡«¬ 7.39. Åα¿¼Ñα »α«úαá¼¼δ, ¿ß»«½∞ºπεΘÑ⌐ »«ñ»α«úαá¼¼π sbrk
-
- 30. èᬿ¼ «íαẫ¼ ¬«¼á¡ñ¡δ⌐ »α«µÑßß«α shell πº¡áÑΓ « Γ«¼, τΓ« Σá⌐½ ¿ß»«½¡∩-
- Ѽδ⌐, ¬«úñá ñ½∩ óδ»«½¡Ñ¡¿∩ ¬«¼á¡ñδ ß«ºñáÑΓ ¡«óδ⌐ »α«µÑßß ? àß½¿ Σá⌐½
- ¿ß»«½¡∩Ѽδ⌐, Γ« ¬á¬ πº¡áΓ∞, ß«ºñá¡ ½¿ «¡ ó αѺπ½∞ΓáΓÑ Γαá¡ß½∩µ¿¿ ¿ßσ«ñ-
- ¡«⌐ »α«úαá¼¼δ ¿½¿ ªÑ »αÑñßΓáó½∩ÑΓ ß«í«⌐ ¡áí«α ¬«¼á¡ñ ∩ºδ¬á shell ? é
- ¬á¬«¼ »«α∩ñ¬Ñ ß½ÑñπÑΓ óδ»«½¡∩Γ∞ »α«óÑα¬π π¬áºá¡¡δσ πß½«ó¿⌐ ?
- 31. é ¬«¼á¡ñ¡«¼ ∩ºδ¬Ñ shell ß¿¼ó«½δ ">>" ¿ß»«½∞ºπεΓß∩ ñ½∩ ¡á»αáó½Ñ¡¿∩ óδó«-
- ñá ñá¡¡δσ ó Σá⌐½ ß π¬áºá¡¡«⌐ ߻ѵ¿Σ¿¬áµ¿Ñ⌐, ¡á»α¿¼Ñα, ¬«¼á¡ñá: run >>
- outfile «Γ¬αδóáÑΓ Σá⌐½ ß ¿¼Ñ¡Ñ¼ "outfile" (á ó ß½πτáÑ «ΓßπΓßΓó¿∩ Σá⌐½á
- ß Γᬿ¼ ¿¼Ñ¡Ñ¼ ß«ºñáÑΓ Ñú«) ¿ ºá»¿ßδóáÑΓ ó ¡Ñú« ñá¡¡δÑ. ìá»¿Φ¿ΓÑ »α«ú-
- αá¼¼π, ó ¬«Γ«α«⌐ ¿ß»«½∞ºπÑΓß∩ φΓá ¬«¼á¡ñá.
- 32. Åα«µÑßß«α ¬«¼á¡ñ¡«ú« ∩ºδ¬á shell »α«óÑα∩ÑΓ ¬«ñ, ó«ºóαáΘáѼδ⌐ Σπ¡¬µ¿Ñ⌐
- exit, ó«ß»α¿¡¿¼á∩ ¡π½Ñó«Ñ º¡áτÑ¡¿Ñ ¬á¬ "¿ßΓ¿¡π", á ½εí«Ñ ñαπú«Ñ º¡áτÑ-
- ¡¿Ñ ¬á¬ "½«ª∞" («íαáΓ¿ΓÑ ó¡¿¼á¡¿Ñ ¡á ¡Ñß«ú½áß«óá¡¡«ßΓ∞ ß ∩ºδ¬«¼ æ¿).
- ÅαÑñ»«½«ª¿¼, τΓ« Σá⌐½, ¿ß»«½¡∩εΘ¿⌐ »α«úαá¼¼π ¡á É¿ßπ¡¬Ñ 7.40, ¿¼ÑÑΓ ¿¼∩
- "truth". Å«∩ß¡¿ΓÑ, τΓ« »α«¿º«⌐ñÑΓ, ¬«úñá shell íπñÑΓ ¿ß»«½¡∩Γ∞ ß½Ññπε-
- Θ¿⌐ ¡áí«α ¬«¼á¡ñ:
- while truth
-
- 229
-
- ┌──────────────────┐
- │ main() │
- │ { │
- │ exit(0); │
- │ } │
- └──────────────────┘
-
- É¿ßπ¡«¬ 7.40
-
- do
- truth &
- done
- 33. é«»α«ß »« É¿ßπ¡¬π 7.29: é ßó∩º¿ ß τѼ 󫺡¿¬áÑΓ ¡Ñ«íσ«ñ¿¼«ßΓ∞ ó ß«ºñá-
- ¡¿¿ »α«µÑßß«ó ñ½∩ ¬«¡óÑ⌐Ñα¡«⌐ «íαáí«Γ¬¿ ñóπσ¬«¼»«¡Ñ¡Γ¡«⌐ ¬«¼á¡ñδ ó π¬á-
- ºá¡¡«¼ »«α∩ñ¬Ñ ?
- 34. ìá»¿Φ¿ΓÑ í«½ÑÑ «íΘπε »α«úαá¼¼π αáí«Γδ «ß¡«ó¡«ú« µ¿¬½á »α«µÑßß«αá shell
- ó τáßΓ¿ «íαáí«Γ¬¿ ¬á¡á½«ó. ê¼ÑÑΓß∩ ó ó¿ñπ, τΓ« »α«úαá¼¼á ñ«½ª¡á π¼ÑΓ∞
- «íαáíáΓδóáΓ∞ ß½πτá⌐¡«Ñ τ¿ß½« ¬á¡á½«ó, π¬áºá¡¡δσ ó ¬«¼á¡ñ¡«⌐ ßΓ᫬Ñ.
- 35. ÅÑαѼѡ¡á∩ ßαÑñδ PATH «»¿ßδóáÑΓ »«α∩ñ«¬, ó ¬«Γ«α«¼ shell'π ß½ÑñπÑΓ
- »α«ß¼áΓα¿óáΓ∞ ¬áΓὫú¿ ó »«¿ß¬áσ ¿ß»«½¡∩Ѽδσ Σá⌐½«ó. é í¿í½¿«ΓÑτ¡δσ
- Σπ¡¬µ¿∩σ execlp ¿ execvp »ÑαÑτ¿ß½Ñ¡¡δÑ ó PATH ¬áΓὫú¿ »α¿ß«Ññ¿¡∩εΓß∩ ¬
- ¿¼Ñ¡á¼ Σá⌐½«ó, ¬α«¼Ñ ΓÑσ, ¬«Γ«αδÑ ¡áτ¿¡áεΓß∩ ß ß¿¼ó«½á "/". éδ»«½¡¿ΓÑ
- φΓ¿ Σπ¡¬µ¿¿.
- *36. ä½∩ Γ«ú«, τΓ«íδ shell ó »«¿ß¬áσ ¿ß»«½¡∩Ѽδσ Σá⌐½«ó ¡Ñ «íαáΘá½ß∩ ¬ ΓѬπ-
- ΘѼπ ¬áΓὫúπ, ßπ»Ñα»«½∞º«óáΓѽ∞ ñ«½ªÑ¡ ºáñáΓ∞ »ÑαѼѡ¡πε ßαÑñδ PATH.
- èá¬á∩ πú஧á íѺ«»áß¡«ßΓ¿ σαá¡Ñ¡¿∩ ñá¡¡δσ ¼«ªÑΓ ó«º¡¿¬¡πΓ∞, Ñß½¿ shell
- »«»δΓáÑΓß∩ ¿ß»«½¡¿Γ∞ Σá⌐½δ ¿º ΓѬπΘÑú« ¬áΓὫúá ?
- 37. èᬿ¼ «íαẫ¼ shell «íαáíáΓδóáÑΓ ¬«¼á¡ñπ cd (ß«ºñáΓ∞ ¬áΓὫú) ? èᬿÑ
- ñÑ⌐ßΓó¿∩ »αÑñ»α¿¡¿¼áÑΓ shell ó »α«µÑßßÑ «íαáí«Γ¬¿ ß½ÑñπεΘÑ⌐ ¬«¼á¡ñ¡«⌐
- ßΓ᫬¿: cd pathname & ?
- 38. è«úñá »«½∞º«óáΓѽ∞ ¡áª¿¼áÑΓ ¡á ¬½áó¿áΓπαÑ ΓÑନ¡á½á ¬½áó¿Φ¿ "delete"
- ¿½¿ "break", óßѼ »α«µÑßßá¼, óσ«ñ∩Θ¿¼ ó úαπ»»π αÑú¿ßΓαᵿ«¡¡«ú«
- shell'á, ΓÑନ¡á½∞¡δ⌐ ñαá⌐óÑα »«ßδ½áÑΓ ß¿ú¡á½ « »αÑαδóá¡¿¿. Å«½∞º«óá-
- Γѽ∞ ¼«ªÑΓ ¿¼ÑΓ∞ ¡á¼ÑαÑ¡¿Ñ «ßΓá¡«ó¿Γ∞ óßÑ »α«µÑßßδ, »«α«ªñÑ¡¡δÑ
- shell'«¼, íѺ óδσ«ñá ¿º ß¿ßΓѼδ. èá¬¿Ñ πß«óÑαΦÑ¡ßΓó«óá¡¿∩ ó ßó∩º¿ ß
- φΓ¿¼ ß½ÑñπÑΓ »α«¿ºóÑßΓ¿ ó ΓÑ½Ñ «ß¡«ó¡«ú« µ¿¬½á »α«úαá¼¼δ shell (É¿ßπ¡«¬
- 7.28) ?
- 39. æ »«¼«Θ∞ε ¬«¼á¡ñδ nohup command_line
- »«½∞º«óáΓѽ∞ ¼«ªÑΓ «Γ¼Ñ¡¿Γ∞ ñÑ⌐ßΓó¿Ñ ß¿ú¡á½«ó « "ºáó¿ßá¡¿¿" ¿ « ºáóÑα-
- ΦÑ¡¿¿ (quit) ó «Γ¡«ΦÑ¡¿¿ »α«µÑßß«ó, αÑ὿ºπεΘ¿σ ¬«¼á¡ñ¡πε ßΓ᫬π
- (command_line). èᬠφΓá ¬«¼á¡ñá íπñÑΓ «íαáíáΓδóáΓ∞ß∩ ó «ß¡«ó¡«¼ µ¿¬½Ñ
- »α«úαá¼¼δ shell ?
- 40. Éáßß¼«Γα¿¼ ¡áí«α ¬«¼á¡ñ ∩ºδ¬á shell:
- nroff -mm bigfile1 > big1out &
- nroff -mm bigfile2 > big2out
- ¿ ó¡«ó∞ «íαáΓ¿¼ß∩ ¬ «ß¡«ó¡«¼π µ¿¬½π »α«úαá¼¼δ shell (É¿ßπ¡«¬ 7.28). ùΓ«
- »α«¿º«⌐ñÑΓ, Ñß½¿ óδ»«½¡Ñ¡¿Ñ »Ñαó«⌐ ¬«¼á¡ñδ nroff ºáóÑαΦ¿Γß∩ αá¡∞ΦÑ óΓ«-
- α«⌐ ? èá¬¿Ñ ¿º¼Ñ¡Ñ¡¿∩ ß½ÑñπÑΓ ó¡ÑßΓ¿ ó «ß¡«ó¡«⌐ µ¿¬½ »α«úαá¼¼δ shell ¡á
- φΓ«Γ ß½πτá⌐ ?
- 41. ùáßΓ« ó« óαѼ∩ óδ»«½¡Ñ¡¿∩ ¿º shell'á ¡Ñ»α«ΓÑßΓ¿α«óá¡¡δσ »α«úαá¼¼ »«∩ó-
- ½∩ÑΓß∩ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ ß½ÑñπεΘÑú« ó¿ñá: "Bus error - core dumped"
- (ÄΦ¿í¬á ó ¼áú¿ßΓα὿ - ß«ñÑন¼«Ñ »á¼∩Γ¿ ßíα«ΦÑ¡« ¡á ó¡ÑΦ¡¿⌐ ¡«ß¿Γѽ∞).
- ÄτÑó¿ñ¡«, τΓ« ó »α«úαá¼¼Ñ óδ»«½¡∩εΓß∩ ¬á¬¿Ñ-Γ« ¡Ññ«»πßΓ¿¼δÑ ñÑ⌐ßΓó¿∩;
- «Γ¬πñá shell πº¡áÑΓ « Γ«¼, τΓ« Ѽπ ¡πª¡« óδóÑßΓ¿ ß««íΘÑ¡¿Ñ «í «Φ¿í¬Ñ ?
- 42. Åα«µÑßß«¼ 1 ó ß¿ßΓÑ¼Ñ ¼«ªÑΓ óδßΓπ»áΓ∞ Γ«½∞¬« »α«µÑßß init. ÆÑ¼ ¡Ñ ¼Ñ-
- ¡ÑÑ, ºá»πßΓ¿ó »α«µÑßß init, áñ¼¿¡¿ßΓαáΓ«α ß¿ßΓÑ¼δ ¼«ªÑΓ ΓѼ ßá¼δ¼ ¿º¼Ñ-
- ¡¿Γ∞ ß«ßΓ«∩¡¿Ñ ß¿ßΓѼδ. ìá»α¿¼Ñα, »α¿ ºáúαπº¬Ñ ß¿ßΓÑ¼á ¼«ªÑΓ ó«⌐Γ¿ ó
- «ñ¡«»«½∞º«óáΓѽ∞߬¿⌐ αѪ¿¼, «º¡áτáεΘ¿⌐, τΓ« ó ß¿ßΓÑ¼Ñ á¬Γ¿óÑ¡ Γ«½∞¬«
- ¬«¡ß«½∞¡δ⌐ ΓÑନ¡á½. ä½∩ Γ«ú«, τΓ«íδ »ÑαÑóÑßΓ¿ »α«µÑßß init ó ß«ßΓ«∩¡¿Ñ
-
- 230
-
- 2 (¼¡«ú«»«½∞º«óáΓѽ∞߬¿⌐ αѪ¿¼), áñ¼¿¡¿ßΓαáΓ«α ß¿ßΓѼδ óó«ñ¿Γ ß ¬«¡ß«½¿
- ¬«¼á¡ñπ
- init 2 .
- è«¡ß«½∞¡δ⌐ shell »«α«ªñáÑΓ ßó«Ñ «ΓóÑΓó½Ñ¡¿Ñ ¿ ºá»π߬áÑΓ init. ùΓ« ¿¼Ñ½«
- íδ ¼ÑßΓ« ó ß¿ßΓÑ¼Ñ ó Γ«¼ ß½πτáÑ, Ñß½¿ íδ á¬Γ¿óÑ¡ íδ½ Γ«½∞¬« «ñ¿¡ »α«-
- µÑßß init ?
- 43. ö«α¼áΓ ºá»¿ßÑ⌐ ó Σá⌐½Ñ "/etc/inittab" ñ«»π߬áÑΓ ºáñá¡¿Ñ ñÑ⌐ßΓó¿∩, ßó∩-
- ºá¡¡«ú« ß ¬áªñδ¼ »«α«ªñáÑ¼δ¼ »α«µÑßß«¼. ìá»α¿¼Ñα, ß getty-»α«µÑßß«¼
- ßó∩ºá¡« ñÑ⌐ßΓó¿Ñ "respawn" (ó«ºα«ªñÑ¡¿Ñ), «º¡áτáεΘÑÑ, τΓ« »α«µÑßß init
- ñ«½ªÑ¡ ó«ºα«ªñáΓ∞ getty-»α«µÑßß, Ñß½¿ »«ß½Ññ¡¿⌐ »αѬαáΘáÑΓ ßπΘÑßΓó«óá-
- ¡¿Ñ. ìá »αá¬Γ¿¬Ñ, ¬«úñá »«½∞º«óáΓѽ∞ óδσ«ñ¿Γ ¿º ß¿ßΓÑ¼δ »α«µÑßß init
- »«α«ªñáÑΓ ¡«óδ⌐ getty-»α«µÑßß, τΓ«íδ ñαπú«⌐ »«½∞º«óáΓѽ∞ ¼«ú »«½πτ¿Γ∞
- ñ«ßΓπ» ¬ óαѼѡ¡« íѺñÑ⌐ßΓóπεΘÑ⌐ ΓÑନ¡á½∞¡«⌐ ½¿¡¿¿. èᬿ¼ «íαẫ¼ φΓ«
- ñѽáÑΓ »α«µÑßß init ?
- 44. ìѬ«Γ«αδÑ ¿º á½ú«α¿Γ¼«ó ∩ñαá »α¿íÑúáεΓ ¬ »α«ß¼«Γαπ Γáí½¿µδ »α«µÑßß«ó.
- éαѼ∩ »«¿ß¬á ñá¡¡δσ ¼«ª¡« ß«¬αáΓ¿Γ∞, Ñß½¿ ¿ß»«½∞º«óáΓ∞ π¬áºáΓѽ¿ ¡á:
- α«ñ¿Γѽ∩ »α«µÑßßá, ½εí«ú« ¿º »«Γ«¼¬«ó, ñαπú«⌐ »α«µÑßß, ¿¼ÑεΘ¿⌐ Γ«ú« ªÑ
- α«ñ¿Γѽ∩. Åα«µÑßß «í¡áαπª¿óáÑΓ óßÑσ ßó«¿σ »«Γ«¼¬«ó, ß½Ññπ∩ ß¡áτá½á ºá
- π¬áºáΓѽѼ ¡á ½εí«ú« ¿º »«Γ«¼¬«ó, á ºáΓѼ ¿ß»«½∞ºπ∩ π¬áºáΓѽ¿ ¡á ñαπú¿Ñ
- »α«µÑßßδ, ¿¼ÑεΘ¿Ñ Γ«ú« ªÑ α«ñ¿Γѽ∩ (µ¿¬½δ ¡Ññ«»πßΓ¿¼δ). èá¬¿Ñ ¿º á½ú«-
- α¿Γ¼«ó óδ¿úαáεΓ «Γ φΓ«ú« ? èá¬¿Ñ ¿º á½ú«α¿Γ¼«ó ¡πª¡« «ßΓáó¿Γ∞ íѺ ¿º¼Ñ-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 231