<title>Unix overview CHAP07</title>


     7

         




      ।饩   ᬮ७ ⥪   ᠭ 
 ࠡ  ;       ᯮ짮    ॠ樨
⥬  㭪権,  ࠢ ⥪⮬ . ⥬ 㭪 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|setrgr|setuid|
+-------+-------+-------+--------+----+------+----+-------+------+
|dupreg |detach-|growreg| detach-|                               |
|attach-|  reg  |       |  reg   |                               |
| reg   |alloc- |       |        |                               |
|       |  reg  |       |        |                               |
|       |attach-|       |        |                               |
|       |  reg  |       |        |                               |
|       |growreg|       |        |                               |
|       |loadreg|       |        |                               |
|       |mapreg |       |        |                               |
+-------+-------+-------+--------+-------------------------------+

    㭮 7.1.  ⥬  㭪樨  ࠢ  ᮬ   
                    㣨 ⬠



        7.1  

    ⢥  ᯮᮡ ᮧ 짮⥫    -
 ⥬ 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    頥  ਧ
  䠩 ⮫쪮  ⮬ 砥, ᫨        -
  ᮢ. ᫨ 뢠騩  㤥 ঠ ਯ  
 ,    㧭,   뢠騩   ࠡ
 ᢮    . 襯ਢ ணࠬ  ࠡ⠫  -
騬  ࠧ,  ᫨  । 室  横 믮 ᮬ-⮬
 뫨  ਯ   .


       7.2 

     ᮮ ᠬ   ᨭ஭ ᮡ⨩.  뫪
ᨣ ந ᠬ -  ,   㭪樨 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.   ᨣ



        7.2.1 ࠡ⪠ ᨣ

      ࠡ뢠  ᨣ   ⥪ ⮣ ,  砥
, ⮬ ⮡ ࠡ ᨣ, 㦭    .  
 ᯮᮡ ࠡ⪨ ᨣ:  蠥  祭 ᨣ, 
頥    ᨣ  믮 ᮡ (짮⥫) 㭪
  祭. 樥  㬮砭  ஭ , ᯮ塞  
०  ,    맮 㭪樨 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


        7.2.2 㯯 ᮢ

    ᬮ  ,   ⥬ UNIX    㭨
  (PID),  ⥬  室 ᯮ짮  䨪樨 -
ᮢ  "㯯",    室. ਬ, , 騥 -
饣 ।   ॣ樮 shell', 易,  ⮬  
짮⥫     "delete"  "break",   ନ쭠
 "ᠥ",      ᮮ⢥騥  ᨣ.  
ᯮ    㯯  ᮢ   䨪樨 㯯 易
ᮢ,   㯫 । ᮡ⨩    -
騩  ᨣ.   㯯   ⠡ ᮢ;   
㯯       㯯.
     ⮣, ⮡ ᢮  㯯 ᮢ 砫쭮 祭, -
ࠢ   䨪樨 ,  ᫥  ᯮ짮  ⥬
㭪樥 setpgrp. ⠪ 맮 㭪樨:
    grp = setpgrp();
  grp  -      㯯  ᮢ.  믮 㭪樨 fork -
-⮬ ᫥  㯯  ᢮  த⥫.  ᯮ짮  㭪樨
setpgrp    祭     ᪮ ନ  
ᮡ,   ⮨   (. ࠧ 10.3.5).


        7.2.3 뫪 ᨣ ᠬ

     뫪 ᨣ  ᯮ ⥬ 㭪 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


뫠 ᨣ  "" ᠬ,  ᨢ訬 㭠᫥ -
  㯯,  ⮬  "" ᮢ த ᢮ 믮-
.


        7.3   

     ⥬ 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. ஦   -
  祭 ᨣ,  ᫨  த⥫ 㦥 訫.


        7.4    

       ᨭ஭஢ த ᢮ 믮  ⮬
襭 ⮬, ᫨ ᯮ ⥬  㭪樥  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,  ᯮ廊 ஢ ᨣ ⨯  "  -
⮬",   㤥  , ᮮ⢥騥 ४⨢訬 ⢮-
 ᠬ, ⮬᪨.   筮 ⮣ -  ⠪  ᮢ
 ந ९ ⠡.


        7.5   

    ⥬  㭪 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.


        7.6    

     뢠  ᮬ   䨪樨 짮⥫,  -
    䨪樨 : ॠ (⢨⥫)  -
䨪樨 짮⥫  ᯮ⥫   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,
 ।⠢ ࠢ ᮡ⢥  㯠  ⠫ ⨭ 짮-
⥫ .


        7.7   

        ⥬  㭪樨 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


  ⥪ 室  த ࠡ ࠧ.


        7.8   SHELL

        筮 ਠ, ⮡ ३  ᭥ ਭ-
樯  ࠡ     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
頥  横  뢠 ᫥  ப.


        7.9     

      ⮣,  ⮡  ॢ ⥬  ⨢ ﭨ  ⨢,
 믮 楤 "砫쭮 㧪".    ࠧ  設
  楤   ᢮ ᮡ,      ॠ
    楫: 㧨  樮 ⥬    ᭮  
設         ᯮ. 筮 楤 砫쭮 㧪
砥  ᥡ ᪮쪮 ⠯. ४祭    設  -
  㪠  ᯥ樠쭮 ணࠬ ⭮ 㧪, 
,    ⮫쪮   ,   設  楤
㧪, ᯮ   யணࠬ.  ணࠬ   
᪮쪨 , ⠢  㣮 ணࠬ.  ⥬  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

 ,  ࠢ騥 , ᪮  ⮣, ⮡  -
   ணࠬ, ਤ  ࠧ ४஢ .


        7.10 

       뫨 ᬮ७ ⥬ 㭪樨,  ।祭  
ࠡ   ⥪⮬    ࠢ 믮 . ⥬-
 㭪 fork ᮧ  ,    ᮤন  -
⥩, 祭  த⥫᪮ . ᮡ ॠ樨  㭪-
樨 fork ⮨  ⮬,   믮 樠 ࠭ ॣ-

                                    223

஢  ⥪ ஦ , ⠪ ࠧ   稭
믮,   襭 㭪樨,  㦥  ⥫ 㭪樨  稭
ᮧ  ᢮ ।祭  ⮬.    ᢮ -
 맮 㭪樨 exit,  ᮥ     -
  த⥫ ᨣ " ⮬". -த⥫  ᮢ
 த ᢮ 믮  ⮬ 襭 -⮬,
ᯮ  ⥬ 㭪 wait. ⥬ 㭪 exec   -
 ᪠  믮 㣨 ணࠬ, 뢠 ᮤন -
塞 䠩  ᢮ ᭮ ࠭⢮.    ᮥ  ,
࠭   ᮬ,  砥     ᮮ⢥-
  ॡﬨ ᯮ塞 䠩.  ⭮  ᯮ짮  ⥩
   稥 ० "sticky-bit"    樮쭮 -
짮    ६, 稢  ⮢    
ணࠬ.   짮⥫ ।⠢   ਢ-
 㣨 짮⥫,  㯥௮짮⥫,    饭  
㣠  ⥬  㭪樨  setuid  setuid-ணࠬ.   㭪樨 brk
   ࠧ ᢮  . 㭪 signal  -
ᠬ  ࠢ ᢮ ॠ樥  㯠騥 ᨣ.   -
祭  ᨣ ந 饭  ᯥ樠쭮 㭪樨 ࠡ⪨ ᨣ-
  ᥭ ᮮ⢥   ⥪    ࠭ -
஢ ⥪ .   ᠬ 뫠  ᨣ,  ᯮ
⥬  㭪  kill,   ⠪ ஫஢ 祭 ᨣ,
।祭 㯯 ᮢ, ਡ  㣠 㭪樨 setpgrp.
      shell   砫쭮 㧪  init  ᯮ
⠭ 饭  ⥬ 㭪, ந  権,  -
  ⥬ 筮 믮塞 ஬. Shell   짮-
⥫, ७砥 ⠭ 䠩 -뢮   뤠 訡,
஦ , ࣠   ஦묨 ᠬ, ᨭ-
 ᢮ 믮  ⨬ ᠬ  ନ  ,  頥
.   init ⮦ ஦ ࠧ ,  ⭮, -
ࠢ騥 ࠡ⮩ 짮⥫  ନ.  ⠪  蠥-
, init  த  믮 ⮩  ᠬ 㭪樨      -
, ᫨  ⥪  ଠ樨 䠩 "/etc/inittab".


        7.11 

  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
