{"id":157,"date":"2010-04-17T23:40:48","date_gmt":"2010-04-18T08:40:48","guid":{"rendered":"\/blog\/?p=157"},"modified":"2023-09-21T09:39:18","modified_gmt":"2023-09-21T00:39:18","slug":"%eb%8d%b0%eb%aa%ac-%ed%94%84%eb%a1%9c%ec%84%b8%ec%8a%a4-%ec%83%9d%ec%84%b1%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=157","title":{"rendered":"\ub370\ubaac \ud504\ub85c\uc138\uc2a4 \uc0dd\uc131\ud558\uae30"},"content":{"rendered":"\n<P>\ub9ac\ub205\uc2a4 \ub124\ud2b8\uc6cc\ud06c \ud504\ub85c\uadf8\ub798\ubc0d<br \/>2\ubd80\uff1a\ub370\ubaac \ud504\ub85c\uc138\uc2a4 \uc0dd\uc131\ud558\uae30<br \/><br \/>\uae00\/ Ivan Griffin\uacfc John Nelson \uc5ed\/ \uc774\uae30\ub3d9(\uc790\uc720\uae30\uace0\uac00)<br \/><br \/>\ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub294 \uc5ec\ub7ec \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc11c\ube44\uc2a4\ud558\uae30 \uc704\ud574\uc11c \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc2e4\ud589\ub418\ub294 \uc11c\ubc84\uc774\ub2e4. \uc5ec\ub7ec\ubd84\uc740 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud560 \ub54c \ub2e4\uc74c\uacfc \uac19\uc740 \uba87 \uac00\uc9c0 \uc0ac\ud56d\uc5d0 \uc8fc\uc758\ud558\uc5ec\uc57c \ud55c\ub2e4. \uac1c\ubc1c\ud558\ub294 \ub3d9\uc548 \ub514\ubc84\uae45\ud560 \ub54c printf\ub098 write\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc11c\ubc84\ub97c \ud3ec\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uc88b\ub2e4. \ub610\ud55c, \uc11c\ubc84\uac00 \uc624\ub3d9\uc791 \ud55c\ub2e4\uba74 \uc911\ub2e8 \ubb38\uc790(\ubcf4\ud1b5 CRTL-C)\ub97c \ubcf4\ub0b4\uc5b4 \ud504\ub85c\uc138\uc2a4\ub97c \ub05d\ub0bc \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\ub3c4 \uc788\ub2e4. \uc2e4\uc81c<br \/>\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc744 \ub54c \uc11c\ubc84\ub294 \ub370\ubaac\ucc98\ub7fc \ub3d9\uc791\ud558\ub3c4\ub85d \uc791\uc131\ud558\uc5ec\uc57c \ud55c\ub2e4. \uc720\ub2c9\uc2a4\uc5d0\uc11c \ub370\ubaac \ud504\ub85c\uadf8\ub7a8\uc740 \ubcf4\ud1b5 \ubb38\uc790 d\ub85c \ub05d\ub09c\ub2e4. \uc608\ub97c \ub4e4\uc5b4, HTTP \uc11c\ubc84(\uc6f9 \uc11c\ubc84)\ub294 httpd\uc774\ub2e4.<br \/>\ub370\ubaac\uc744 \uc2e4\ud589\uc2dc\ud0ac \ub54c \uc790\ub3d9\uc801\uc73c\ub85c \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc218\ud589\ud558\ub3c4\ub85d \ud558\ub294 \uac83\uc774 \uc88b\ub2e4. \uc774\ub294 fork() \ud638\ucd9c\uc744 \uc0ac\uc6a9\ud558\uba74 \uac04\ub2e8\ud558\ub2e4. \uc81c\ub300\ub85c \ub3d9\uc791\ud558\ub294 \ub370\ubaac\uc740 fork\ub97c \uc218\ud589\ud55c \ud6c4\uc5d0 \ubd80\ubaa8\ub85c\ubd80\ud130 \ubb3c\ub824\ubc1b\uc740 \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130\ub97c \ubaa8\ub450 \ub2eb\ub294\ub2e4. \ud30c\uc77c\uc774 \ud130\ubbf8\ub110 \uc7a5\uce58\uc778 \uacbd\uc6b0 \ud2b9\ud788 \uc911\uc694\ud55c\ub370 \ub370\ubaac\uc744 \uc2e4\ud589\ud55c \uc0ac\uc6a9\uc790\uac00 \ub85c\uadf8\uc544\uc6c3\ud560 \ub54c \ud130\ubbf8\ub110 \uc0c1\ud0dc\ub97c \ucd08\uae30\ud654\ud558\ub824\uba74 \uc7a5\uce58\ub97c \ub2eb\uc544\uc57c\ub9cc \ud55c\ub2e4. \uc5f4\uace0 \ub2eb\uc744 \uc218 \uc788\ub294\ud30c\uc77c \uac1c\uc218\uc758 \ucd5c\ub300<br \/>\uac12\uc744 \uacb0\uc815\ud558\ub824\uba74 getrlimit() \ud638\ucd9c\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<br \/>\uadf8 \ub2e4\uc74c \ud504\ub85c\uc138\uc2a4\ub294 \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc744 \ubcc0\uacbd\ud55c\ub2e4. \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc740 \uc2dc\uadf8\ub110\uc744 \ubcf4\ub0b4\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \ud130\ubbf8\ub110\uc5d0\uc11c \uac19\uc740 \uadf8\ub8f9\uc5d0 \uc18d\ud55c \ud504\ub85c\uc138\uc2a4\ub294 \ud3ec\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc218\ud589\ub418\uace0 \ud130\ubbf8\ub110\uc5d0\uc11c \ubcf4\ub0b4\ub294 \ub370\uc774\ud130\ub97c \uc77d\uc744 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \ub2e4\ub978 \uadf8\ub8f9\uc5d0 \uc18d\ud55c \ud504\ub85c\uc138\uc2a4\ub294 \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc218\ud589\ub41c\ub2e4\uace0 \uac04\uc8fc\ud55c\ub2e4(\uadf8\ub9ac\uace0 \uc774\ub807\uac8c \uc77d\uc73c\ub824\uace0 \ud558\uba74 \ud504\ub85c\uc138\uc2a4\uc758 \uc218\ud589\uc774 \uc7a0\uc2dc \uc911\ub2e8\ub420 \uac83\uc774\ub2e4).<br \/>\uc81c\uc5b4 \ud130\ubbf8\ub110\uc744 \ub2eb\uace0 \uc138\uc158 \uadf8\ub8f9\uc744 \ubcc0\uacbd\ud558\ub294 \uac83\uc740 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\uac00 \uc774\uc804 \uadf8\ub8f9 \ub9ac\ub354(\ubcf4\ud1b5 \uc178\uc774 \ub41c\ub2e4)\ub85c\ubd80\ud130\uc758 \uc7a0\uc7ac\uc801\uc778(\uc608\ub97c \ub4e4\uc5b4, \uc0ac\uc6a9\uc790\uac00 kill \uba85\ub839\uc73c\ub85c \ubcf4\ub0b4\uc9c0 \uc54a\uc740) \uc2dc\uadf8\ub110\uc744 \ubc1b\ub294 \uac83\uc744 \ub9c9\ub294\ub2e4. \ud504\ub85c\uc138\uc2a4\ub294 \uc138\uc158\uc5d0 \uc18d\ud55c \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\ub2e4. setsid() \uc2dc\uc2a4\ud15c \ud638\ucd9c\ub85c \uadf8 \ud504\ub85c\uc138\uc2a4\ub97c \uc138\uc158 \ub9ac\ub354\ub85c \ud558\ub294 \uc0c8\ub85c\uc6b4 \uc138\uc158(\uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9)\uc774 \ub9cc\ub4e4\uc5b4\uc9c0\uac8c \ub41c\ub2e4.<br \/>\ub370\ubaac\uc774 \uc81c\uc5b4 \ud130\ubbf8\ub110\uc744 \uc783\uac8c \ub418\uba74 \ub2e4\uc2dc \uc5bb\uc5b4\uc11c\ub294 \uc548\ub41c\ub2e4. \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9 \ub9ac\ub354\uac00 \uc0c8\ub85c\uc6b4 \ud130\ubbf8\ub110 \uc7a5\uce58\ub97c \uc5f4 \ub54c \uc81c\uc5b4 \ud130\ubbf8\ub110\uc744 \uc790\ub3d9\uc73c\ub85c \uc5bb\ub294\ub2e4. \uc774\ub97c \ub9c9\ub294 \uac00\uc7a5 \uc26c\uc6b4 \ubc29\ubc95\uc740 setsid()\ub97c \ud638\ucd9c\ud55c \ud6c4\uc5d0 fork()\ub97c \ub2e4\uc2dc \ud638\ucd9c\ud558\ub294 \uac83\uc774\ub2e4. \ub370\ubaac\uc740 \ub450 \ubc88\uc9f8 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub85c \uc2e4\ud589\ub418\uac8c \ub41c\ub2e4. <br \/>\ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4(\uc138\uc158\uacfc \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9 \ub9ac\ub354)\uc758 \uc2e4\ud589\uc774 \ub05d\ub098\uba74 \ub450 \ubc88\uc9f8 \uc790\uc2dd\uc740 0\ubc88\uc758 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc744 \uc5bb\uac8c \ub41c\ub2e4(init\uc758 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \ub418\uae30 \ub54c\ubb38\uc774\ub2e4). \ub530\ub77c\uc11c, \uc0c8\ub85c\uc6b4 \uc81c\uc5b4 \ud130\ubbf8\ub110\uc744 \uc5bb\uc744 \uc218\ub294 \uc5c6\ub294\ub370 \uadf8\uac83\uc740 \ud504\ub85c\uc138\uc2a4 \ub9ac\ub354\uac00 \uc544\ub2c8\uae30 \ub54c\ubb38\uc774\ub2e4. \ub2e4\uc591\ud55c \ud45c\uc900 \ub77c\uc774\ube0c\ub7ec\ub9ac \ub8e8\ud2f4\uc740 \uc138 \uac00\uc9c0 \ud45c\uc900 \uc785\ucd9c\ub825 \ub514\uc2a4\ud06c\ub9bd\ud130\uac00 \uc5f4\ub824 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uae30\ub3c4 \ud55c\ub2e4. \uacb0\uacfc\uc801\uc73c\ub85c \uc11c\ubc84\ub294 \ubcf4\ud1b5 \uc138 \uac00\uc9c0 \ubaa8\ub4e0 \ub514\uc2a4\ud06c\ub9bd\ud130\ub97c \uc5f4\uc5b4 \ub450\uace0, \/dev\/null\uacfc \uac19\uc774 \uc2dc\uc2a4\ud15c\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\ub294 I\/O \uc7a5\uce58\uc5d0 \uc5f0\uacb0\ub418\uc5b4 \uc788\ub2e4.<br \/>\ub370\ubaac\uc740 \ubcf4\ud1b5 \ubd80\ud2b8\ud560 \ub54c \uc2dc\uc791\ud558\uace0 \uc2dc\uc2a4\ud15c\uc774 \uac00\ub3d9\ud558\ub294 \uc2dc\uac04 \ub3d9\uc548 \uc904\uace7 \uc2e4\ud589\uc911\uc778 \uc0c1\ud0dc\ub85c \uc788\ub2e4. \ub370\ubaac\uc774 \ub9c8\uc6b4\ud2b8\ub41c \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc2dc\uc791\ud558\uc600\ub2e4\uba74 \ub370\ubaac\uc744 \uc8fd\uc774\uae30 \uc804\uae4c\uc9c0 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc744 \ub9c8\uc6b4\ud2b8\ub97c \ud574\uc81c\ud558\ub294 \uac83\uc774 \ubd88\uac00\ub2a5\ud558\ub2e4. \uc774\ub97c \uace0\ub824\ud558\uc5ec \ub370\ubaac \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ud560 \ub54c chdir()\uc744 \uc218\ud589\ud558\uc5ec \/\ub85c \ub193\ub294 \uac83\uc774 \ud604\uba85\ud558\ub2e4(\ub610\ub294 \ub370\ubaac\uc758 \ub3d9\uc791\uacfc \uad00\uacc4\uac00 \uc788\ub294 \ud30c\uc77c\uc774 \uc788\ub294 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc73c\ub85c \ub193\uc544\ub3c4 \ub41c\ub2e4).<br \/>\ub370\ubaac\uc740 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uc758 umask \uc815\ubcf4\ub97c \ubb3c\ub824\ubc1b\ub294\ub2e4. \ub098\uc911\uc5d0 \ub370\ubaac\uc5d0\uc11c \ud30c\uc77c\uc744 \uc0dd\uc131\ud560 \ub54c \uc774\ub97c \ubc29\uc9c0\ud558\uae30 \uc704\ud574\uc11c\ub294 \ubcf4\ud1b5 umask()\ub97c \uc0ac\uc6a9\ud558\uc5ec 0\uc73c\ub85c \ub193\ub294\ub2e4.<\/P>\n<P>\ub9ac\uc2a4\ud2b8 1\uc758 \uc608\uc81c \ucf54\ub4dc\uc5d0\uc11c \uc774\ub7ec\ud55c \uc810\uc744 \uc124\uba85\ud558\uace0 \uc788\ub2e4.\uc138\uc158\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\ub294 \uc2dc\uc2a4\ud15c(\uc608\ub97c \ub4e4\uc5b4 \ub9ac\ub205\uc2a4, \uc194\ub77c\ub9ac\uc2a4\uc640 \ub2e4\ub978 \uba87\uba87 \uc2dc\uc2a4\ud15c)\uc5d0\uc11c\ub294 \ub9ac\uc2a4\ud2b8 2\uc758 \ucf54\ub4dc\ub97c \uc0ac\uc6a9\ud558\uc5ec setsid()\uc640 \uac19\uc740 \uacb0\uacfc\ub97c \uc5bb\uc744 \uc218 \uc788\ub2e4.<\/P>\n<P>\uc8fc \uc11c\ubc84 \ucf54\ub4dc\uc5d0\uc11c \ud504\ub85c\uc138\uc2a4\ub97c \ubcf5\uc81c\ud558\uc5ec \ub9cc\ub4e4\uc5b4\uc9c4 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc885\ub8cc\ud558\uba74 \ud560\ub2f9\ub41c \uba54\ubaa8\ub9ac\ub97c \ud68c\uc218\ud558\uc9c0\ub9cc \ud504\ub85c\uc138\uc2a4 \ud14c\uc774\ube14\uc758 \uc5d4\ud2b8\ub9ac\uc5d0\uc11c\ub294 \uc81c\uac70\ub418\uc9c0 \uc54a\ub294\ub2e4. <br \/>\ubc14\uafd4 \ub9d0\ud558\uba74, \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uac8c \ub418\uba74 \uc608\ub97c \ub4e4\uc5b4 \uc2dc\uc2a4\ud15c \uc790\uc6d0\uc744 \uc18c\ubaa8\ud558\uc9c0\ub294 \uc54a\uc9c0\ub9cc \uadf8\ub4e4\uc744 \uc644\uc804\ud788 \ub418\ub3cc\ub824 \ubc1b\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \uadf8\ub4e4\uc774 \uc880\ube44\uc640 \uac19\uc740 \ud615\ud0dc\ub85c \ub3cc\uc544\ub2e4\ub2c8\ub294 \uc774\uc720\ub294 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \ud544\uc694\ud55c \uacbd\uc6b0(\uc608\ub97c \ub4e4\uc5b4, CPU \uc0ac\uc6a9\ub7c9 \ub4f1) \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub85c\ubd80\ud130 \ud1b5\uacc4\ub97c \uc218\uc9d1\ud560 \uc218 \uc788\ub3c4\ub85d \ud558\uae30 \ub54c\ubb38\uc774\ub2e4. \ubd84\uba85\ud788, \ub370\ubaac\uc740 \ud504\ub85c\uc138\uc2a4 \ud14c\uc774\ube14\uc774 \uc880\ube44 \ud504\ub85c\uc138\uc2a4\ub85c \uac00\ub4dd \ucc28\ub294 \uac83\uc744 \uc6d0\ud558\uc9c0\ub294 \uc54a\uc744 \uac83\uc774\ub2e4.<br \/>\uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uac8c \ub418\uba74 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uc5d0 SIGCHLD \uc2dc\uadf8\ub110\uc744 \ubcf4\ub0b8\ub2e4. <\/P>\n<P>\ubd80\ubaa8\uac00 \uc790\uc2dd\uc744 \uac15\uc81c\ub85c \ud68c\uc218\ud558\uc9c0 \uc54a\ub294 \ud55c, \uc2dc\uadf8\ub110\uc758 \uae30\ubcf8 \ud578\ub4e4\ub7ec\uac00 \uc790\uc2dd\uc744 \uc880\ube44\ub85c \ubc14\uafbc\ub2e4. \uc774\ub294 \ub9ac\uc2a4\ud2b8 3\uc5d0\uc11c \ubcfc \uc218 \uc788\ub2e4. \ub300\uc548\uc73c\ub85c \ub9ac\uc2a4\ud2b8 4\uc5d0\uc11c \ubcfc \uc218 \uc788\ub4ef\uc774 \uc2dc\uadf8\ub110\uc744 \ubb34\uc2dc\ud558\uace0 \uc880\ube44\uac00 \uc8fd\ub3c4\ub85d \ud560 \uc218 \uc788\ub2e4.<br \/>\ub370\ubaac\uc774 \ub300\ubd80\ubd84\uc758 \ub2e4\ub978 \uc2dc\uadf8\ub110\uc744 \ubb34\uc2dc\ud558\uac70\ub098 SIGHUP\uc744 \ubc1b\uc740 \ud6c4\uc5d0 \uc124\uc815 \ud30c\uc77c\uc744 \ub2e4\uc2dc \uc77d\uace0 \uc7ac\uc2dc\uc791 \ud558\ub294 \uc77c\ub3c4 \uc790\uc8fc \uc788\ub2e4. \ub9ce\uc740 \ub370\ubaac\uc740 \uc790\uc2e0\uc758 PID(\ud504\ub85c\uc138\uc2a4 \ubc88\ud638)\ub97c \ub85c\uadf8 \ud30c\uc77c\uc5d0 \uc800\uc7a5\ud55c\ub2e4, \ubcf4\ud1b5\uc740 \/var\/run\/foobar.pid(foobar\ub294 \ub370\ubaac\uc758 \uc774\ub984\uc774\ub2e4)\uac00 \ub418\ub294\ub370 \ud504\ub85c\uc138\uc2a4\ub97c \uc911\ub2e8\ud558\ub294 \uacbd\uc6b0 \ub3c4\uc6c0\uc744 \uc900\ub2e4.<br \/>\uc2dc\uc2a4\ud15c\uc744 \uc167\ub2e4\uc6b4 \ud560 \ub54c(\ub610\ub294 \ub2e4\uc911 \uc0ac\uc6a9\uc790\uc5d0\uc11c \ub2e8\uc77c \uc0ac\uc6a9\uc790 \ubaa8\ub4dc\ub85c \ubc14\ub014 \ub54c), \ubaa8\ub4e0 \ud504\ub85c\uc138\uc2a4\uc5d0\uac8c \uc54c\ub9ac\uae30 \uc704\ud574\uc11c SIGTERM \uc2dc\uadf8\ub110\uc744 \ubcf4\ub0b8\ub2e4. \uadf8 \ub2e4\uc74c init \ud504\ub85c\uc138\uc2a4\ub294 \uc815\ud574\uc9c4 \uc2dc\uac04\ub9cc\ud07c \uae30\ub2e4\ub9b0\ub2e4(SVR4\uc5d0\uc11c\ub294 20\ucd08, BSD\uc5d0\uc11c\ub294 5\ucd08, \ub9ac\ub205\uc2a4 init\uc5d0\uc11c\ub294 5\ucd08, \ub9ac\ub205\uc2a4 \uc167\ub2e4\uc6b4(shutdown)\uc5d0\uc11c\ub294 \uae30\ubcf8\uac12\uc73c\ub85c 3\ucd08\uc774\uc9c0\ub9cc \uba85\ub839\ud589 \uc778\uc790\uc5d0\uc11c \uc9c0\uc815 \uac00\ub2a5) \ud504\ub85c\uc138\uc2a4\uac00 \uacc4\uc18d \uc0b4\uc544 \uc788\uc73c\uba74 \ubb34\uc2dc\ub418\uc9c0 \uc54a\ub294 \uc2dc\uadf8\ub110\uc778 <br \/>SIGKILL \uc2dc\uadf8\ub110\uc744 \ubcf4\ub0b8\ub2e4. <br \/>\ub530\ub77c\uc11c, \ub2e4\ub978 \ud504\ub85c\uc138\uc2a4\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \uc885\ub8cc\ud558\ub294\uc9c0 \ud655\uc2e4\ud788 \ud558\ub824\uba74 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\uac00 SIGTERM \uc2dc\uadf8\ub110\uc744 \uac00\ub85c\ucc4c \uc218 \uc788\uc5b4\uc57c \ud55c\ub2e4.<br \/>------------------------------------------------------------<br \/>\ub9ac\uc2a4\ud2b8 1 : \ub370\ubaac \uc2dc\uc791 \ucf54\ub4dc<br \/>\/* Listing 1:<br \/>* fork(), closing controlling terminal, chang<br \/>* ing session group, fork(), change current <br \/>* working directory, set umask Ivan Griffin <br \/>* (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>) *\/<br \/>#include &lt;sys\/time.h&gt;<br \/>#include &lt;sys\/resource.h&gt;<br \/>#include &lt;sys\/stat.h&gt;<br \/>#include &lt;unistd.h&gt;<br \/>int main(int argc, char *argv)<br \/>{<br \/>&nbsp; struct rlimit resourceLimit = { 0 };<br \/>&nbsp; int status = -1;<br \/>&nbsp; int fileDesc = -1;<br \/><\/P>\n<P>&nbsp; \/* somewhere in the code *\/<br \/>&nbsp; status = fork();<\/P>\n<P><br \/>&nbsp; switch (status)<br \/>&nbsp; {<br \/>&nbsp; &nbsp; case -1:<br \/>&nbsp; &nbsp; perror(fork());<br \/>&nbsp; &nbsp; exit(1);<br \/>&nbsp; &nbsp; case 0: \/* child process *\/<br \/>&nbsp; &nbsp; break;<br \/>&nbsp; &nbsp; default: \/* parent process *\/<br \/>&nbsp; &nbsp; exit(0);<br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; \/* child process *\/<br \/>&nbsp; resourceLimit.rlim_max = 0;<br \/>&nbsp; status = getrlimit(RLIMIT_NOFILE, &amp;resourceLimit);<\/P>\n<P><br \/>&nbsp; if (-1 == status) \/* shouldn't happen *\/<br \/>&nbsp; {<br \/>&nbsp; &nbsp; perror(getrlimit());<br \/>&nbsp; &nbsp; exit(1);<br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; if (0 == resourceLimit.rlim_max)<br \/>&nbsp; {<br \/>&nbsp; &nbsp; fprintf(Max number of open file <br \/>&nbsp; &nbsp; descriptors is 0!!\\n);<br \/>&nbsp; &nbsp; exit(1); <br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; for (i = 0; i &lt; resourceLimit.rlim_max; i++)<br \/>&nbsp; {<br \/>&nbsp; &nbsp; (void) close(i);<br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; status = setsid();<br \/>&nbsp; if (-1 == status)<br \/>&nbsp; { <br \/>&nbsp; &nbsp; perror(setsid());<br \/>&nbsp; &nbsp; exit(1);<br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; status = fork();<br \/>&nbsp; switch (status)<br \/>&nbsp; {<br \/>&nbsp; &nbsp; case -1:<br \/>&nbsp; &nbsp; perror(fork());<br \/>&nbsp; &nbsp; exit(1);<br \/>&nbsp; &nbsp; case 0: \/* (second) child process *\/<br \/>&nbsp; &nbsp; break;<br \/>&nbsp; &nbsp; default: \/* parent process *\/<br \/>&nbsp; &nbsp; exit(0);<br \/>&nbsp; }<\/P>\n<P><br \/>&nbsp; \/* now we are in a new session and process <br \/>&nbsp;&nbsp; * group than process that started the <br \/>&nbsp;&nbsp; * daemon. We also have no <br \/>&nbsp;&nbsp; * controlling terminal *\/<\/P>\n<P><br \/>&nbsp; chdir(\"\/\");<br \/>&nbsp; umask(0);<br \/>&nbsp; fileDesc = open(\"\/dev\/null\" O_RDWR);<br \/>&nbsp; \/* stdin *\/<br \/>&nbsp; (void) dup(fileDesc); \/* stdout *\/<br \/>&nbsp; (void) dup(fileDesc); \/* stderr *\/<br \/>&nbsp; \/* the rest of the daemon code executes in this environment *\/<br \/>&nbsp; return 0;<br \/>}<br \/><\/P>\n<P>---------------------------------------------------------------<br \/><br \/>\ub9ac\uc2a4\ud2b8 2 : sutsid()\ub97c \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc740 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc4f0\uc774\ub294 \ub370\ubaac \ucf54\ub4dc<br \/>\/* Listing 2:<br \/>&nbsp;* change process group for systems without <br \/>&nbsp;* sessions Ivan Griffin (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>) *\/<br \/><\/P>\n<P>#ifdef BSD<br \/>{<br \/>&nbsp;&nbsp; int fd;<br \/>&nbsp;&nbsp; setpgrp(0, getpid());\/* change process group *\/<br \/><\/P>\n<P>&nbsp;&nbsp; \/* open controlling terminal *\/<br \/>&nbsp;&nbsp; fd = open(\/dev\/tty, O_RDWR); <br \/>&nbsp;&nbsp; if (-1 != open)<br \/>&nbsp;&nbsp; { <br \/>&nbsp; &nbsp; \/* lose controlling terminal *\/<br \/>&nbsp; &nbsp; &nbsp; ioctl(fd, TIOCNOTTY, 0);<br \/>&nbsp; &nbsp; &nbsp; close(fd);<br \/>&nbsp; &nbsp; }<br \/>}<br \/>#endif<\/P>\n<P><br \/>#ifdef SVR4<br \/>\/* change process group AND lose controlling <br \/>* terminal *\/<br \/>setpgrp();<br \/>#endif<br \/><\/P>\n<P>&nbsp;<\/P>\n<P>-----------------------------------------------------------<\/P>\n<P>\ub9ac\uc2a4\ud2b8 3 : (\uc8fd\uc740) \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub97c \uac15\uc81c\ub85c \ud68c\uc218\ud558\ub294 \ucf54\ub4dc<br \/>\/* Listing 3:<br \/>* Explicitly reaping the child:<br \/>* Ivan Griffin (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>) *\/<br \/>#include &lt;signal.h&gt;<br \/>#include &lt;sys\/types.h&gt;<br \/>#include &lt;sys\/wait.h&gt;<br \/>void ReapChild(int pid);<br \/>struct sigaction reapAction =<br \/>{ ReapChild, &nbsp; &nbsp; \/* SIG_DFL for default, SIG_IGN to ignore, else handler *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 0, &nbsp;&nbsp; &nbsp;\/* mask of signals to block during execution of handler *\/<br \/>&nbsp; SA_RESTART, \/* don't reset to default handler after signal is raised *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NULL \/* Not used - should be NULL *\/<br \/>};<\/P>\n<P><br \/>int main(int argc, char *argv[])<br \/>{<br \/>&nbsp; &nbsp; \/* somewhere in main code *\/<br \/>&nbsp; &nbsp; sigaction(SIGCHLD, &amp;reapAction, NULL);<br \/>&nbsp; &nbsp; \/* rest of code *\/<br \/>&nbsp; &nbsp; return 0;<br \/>}<\/P>\n<P><br \/>void ReapChild(int pid)<br \/>{<br \/>&nbsp; &nbsp; int status;<br \/>&nbsp; &nbsp; wait(&amp;status);<br \/>}<\/P>\n<P>&nbsp;<\/P>\n<P><br \/>--------------------------------------------------------------<br \/>\ub9ac\uc2a4\ud2b8 4 : SIGCHLD \uc2dc\uadf8\ub110 \ubb34\uc2dc\ud558\uae30<br \/>\/*Listing 4:<br \/>* Ignoring the SIGCHLD signal<br \/>* Ivan Griffin (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>) *\/<br \/>#include &lt;signal.h&gt;<br \/><\/P>\n<P>struig action ignoreChildDeath =<br \/>{<br \/>&nbsp; &nbsp; NULL, 0, SA_NOCLDSTOP | SA_RESTART, NULL <br \/>};<\/P>\n<P><br \/>int main(int argc, char *argv[])<br \/>{<br \/>&nbsp; &nbsp; \/* somewhere in main code *\/<br \/>&nbsp; &nbsp; sigaction(SIGCHLD, &amp;ignoreChildDeath, NULL);<br \/>&nbsp; &nbsp; \/* other code *\/<br \/>&nbsp; &nbsp; return 0;<br \/>}<\/P>\n<P>&nbsp;<\/P>\n<P><br \/>----------------------------------------------------------<br \/>\ub124\ud2b8\uc6cc\ud06c \ub370\ubaac \uc124\uacc4<br \/><br \/>\uadf8\ub9bc 1\uc5d0\uc11c\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \ub124\ud2b8\uc6cc\ud06c \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud558\ub294 \ub370\ubaac\uc5d0\uc11c \uac00\ub2a5\ud55c \uc138 \uac00\uc9c0 \uc124\uacc4 \ubc29\uc2dd\uc744 \ubcf4\uc5ec\uc900\ub2e4. \uccab \ubc88\uc9f8 \uadf8\ub9bc\uc5d0\uc11c \ub370\ubaac\uc740 \ud504\ub85c\uc138\uc2a4\ub97c \ubcf5\uc81c\ud558\uc5ec \uac01 \ud504\ub85c\uc138\uc2a4\uc758 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \uac00\uc7a5 \uc77c\ubc18\uc801\uc778 \ubc29\ubc95\uc744 \ub530\ub978\ub2e4. \ucc98\ub9ac\ud558\ub294 \ub3d9\uc548 \ubd80\ubaa8\ub294 \uc0c8\ub85c\uc6b4 \uc811\uc18d \uc694\uccad\uc744 \ubc1b\ub294\ub2e4. \uc774\ub7ec\ud55c \ub3d9\uc2dc \ucc98\ub9ac \uae30\ubc95\uc740 \uacc4\uc18d\ub418\ub294 \uc694\uccad\uc5d0 \ub300\uc751\ud560 \uc218 \uc788\ub2e4\ub294 \uc7a5\uc810\uc774 \uc788\uace0 \ucc28\ub840\ub300\ub85c \ucc98\ub9ac\ud558\ub294 \uac83\ubcf4\ub2e4 \ub354 \ub098\uc740 \uc131\ub2a5\uc744 \ub0bc <br \/>\uc218 \uc788\uc73c\uba70 \ubc18\ubcf5\uc801\uc73c\ub85c \uc11c\ube44\uc2a4\ub97c \ucc98\ub9ac\ud55c\ub2e4. \ubd88\ud589\ud788\ub3c4 \ucee4\ub110\uc740 \ucee4\ub110\ubaa8\ub4dc\uc640 \uc0ac\uc6a9\uc790 \ubaa8\ub4dc\ub97c \uc804\ud658\ud574\uc57c \ud558\uace0 \ud504\ub85c\uc138\uc2a4 \ubcf5\uc81c\uac00 \ud544\uc694\ud558\uc5ec \ucee4\ub2e4\ub780 \ubd80\ud558\uac00 \uac78\ub9ac\ubbc0\ub85c \uc774\ub7ec\ud55c \uc811\uadfc \ubc29\ubc95\uc740 \ub300\ub2e8\ud788 \ub9ce\uc740 \uc694\uccad\uc744 \ucc98\ub9ac\ud574\uc57c \ud558\ub294 \uc11c\ubc84\uc5d0\ub294 \ubd80\uc801\ud569\ud558\ub2e4.<br \/>\ub450 \ubc88\uc9f8 \ub3c4\ud45c\ub294 \ub610 \ub2e4\ub978 \uc694\uad6c\ub97c \ucc98\ub9ac\ud558\uae30 \uc804\uc5d0 \uc11c\ubc84\uac00 \ud558\ub098\uc758 \ud504\ub85c\uc138\uc2a4\ub9cc\uc744 \uc2e4\ud589\ud558\uba74\uc11c \ubc18\ubcf5\uc801, \ub3d9\uae30\uc801\uc73c\ub85c \uc694\uccad\uc744 \ubc1b\uc544\ub4e4\uc774\uace0 \ucc98\ub9ac\ud558\ub294 \uac83\uc744 \ubcf4\uc5ec\uc900\ub2e4. \uc774\ub7ec\ud55c \uc811\uadfc \ubc29\ubc95\uc740 \uc694\uccad\uc774 \ucc98\ub9ac\ub418\ub294 \ub3d9\uc548 \ubc1c\uc0dd\ud558\ub294 \ub610\ub2e4\ub978 \uc694\uccad\uc774 \uc7a0\uc2dc \uc911\ub2e8\ub418\uac70\ub098 \uac70\ubd80\ub41c\ub2e4\ub294 \uc57d\uc810\uc774 \uc788\ub2e4. \uc7a0\uc2dc \uc911\ub2e8\ub41c\ub2e4\uba74 \uc911\ub2e8\ub418\ub294 \uc2dc\uac04\uc758 \ub300\ubd80\ubd84\uc740 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uace0 \ud1b5\uc2e0\ud558\ub294 \ub370 \uac78\ub9ac\ub294 \uc2dc\uac04\uc774\ub2e4. <br \/>\uc774\ub7ec\ud55c \uc9c0\uc5f0 \uc2dc\uac04\uc5d0 \ub530\ub77c, \ub4e3\uae30 \ud050(queue)\uac00 \uac00\ub4dd \ucc28 \uc788\uc744 \ub54c \uc0c1\ub2f9\ud55c \uc591\uc758 \uc694\uccad\uc774 \uac70\ubd80\ub420 \uc218 \uc788\ub2e4. \ub530\ub77c\uc11c, \uc774\ub7ec\ud55c \uc811\uadfc \ubc29\ubc95\uc740 \uc9c0\uc5f0 \uc2dc\uac04\uc774 \ub9e4\uc6b0 \uc9e7\uc740 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294\ub370 \ub9e4\uc6b0 \uc801\ud569\ud558\ub2e4. \ub610\ud55c TCP \ub370\ubaac\ubcf4\ub2e4\ub294 UDP \ub124\ud2b8\uc6cc\ud06c \ub370\ubaac\uc5d0 \uc798 \ub9de\ub294\ub2e4.<br \/><\/P>\n<P><br \/>\ud504\ub85c\uc138\uc2a4 \ubbf8\ub9ac \ud560\ub2f9\ud558\uae30<br \/><br \/>\uadf8\ub9bc 1\uc758 \uc138 \ubc88\uc9f8 \ub3c4\ud45c\ub294 \uac00\uc7a5 \ubcf5\uc7a1\ud558\ub2e4. \uc774\ub294 \ub370\ubaac\uc774 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\uae30 \uc704\ud574\uc11c \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\ub97c \ubbf8\ub9ac \ud560\ub2f9\ud558\ub294 \uac83\uc744 \ubcf4\uc5ec\uc900\ub2e4. \uc8fc \ud504\ub85c\uc138\uc2a4\uac00 listen()\ub2e4\uc74c\uc5d0 fork()\ub97c \ud638\ucd9c\ud558\uc9c0\ub9cc accept() \uc774\uc804\uc5d0\ud638\ucd9c\ud55c\ub2e4\ub294 \uac83\uc5d0 \uc8fc\uc758\ud55c\ub2e4. \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 accept()\ub97c \ud638\ucd9c\ud55c\ub2e4. \uc774\ub7ec\ud55c \uc2dc\ub098\ub9ac\uc624\ub294 accept() \ud638\ucd9c\uc744 \uc7a0\uc2dc \uc911\ub2e8\uc2dc\ud0a4\ub294 \ub3d9\uc2dc\uc5d0 \uc774\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ub300\uae30\ud558\ub294 \uc11c\ubc84 \ud504\ub85c\uc138\uc2a4\ub97c \ub0a8\uaca8 \ub454\ub2e4. \uadf8\ub7ec\ub098, \ucee4\ub110\uc740 \uc8fc\uc5b4\uc9c4 \uc694\uccad\uc5d0\uc11c \uc624\uc9c1 \ud558\ub098\uc758 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\ub9cc\uc774 accept() \ud638\ucd9c\uc5d0 \uc131\uacf5\ud560 \uac83\uc774\ub77c\ub294 \uac83\uc744 \ubcf4\uc99d\ud55c\ub2e4. \uc694\uccad\uc5d0 \uc11c\ube44\uc2a4\ud55c \ub2e4\uc74c\uc5d0 accept \uc0c1\ud0dc\ub97c \ub9ac\ud134\ud55c\ub2e4. \uc8fc \ud504\ub85c\uc138\uc2a4\ub294 \uc885\ub8cc\ud558\uac70\ub098(SIGCHLD\ub294 \ubb34\uc2dc\ud55c\ub2e4) \ubd80 \ud504\ub85c\uc138\uc2a4\uac00 \uc885\ub8cc\ud558\ub294 \uac83\uc744 \ud68c\uc218\ud558\uae30 \uc704\ud574\uc11c \uacc4\uc18d wait()\ub97c \ud638\ucd9c\ud560 \uc218 \uc788\ub2e4.<br \/>\ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \uc790\uc2e0\uc744 \uc8fd\uc774\uae30 \uc804\uc5d0 \uba54\ubaa8\ub9ac \ub0ad\ube44\ub97c \ub9c9\uae30 \uc704\ud558\uc5ec \ubcf4\ud1b5 \uc815\ud574\uc9c4 \uac1c\uc218\uc758 \uc694\uccad\uc744 \ubc1b\uc544\ub4e4\uc778\ub2e4. \ubc1b\uc544\ub4e4\uc774\ub294 \uc694\uccad\uc758 \uc218\uac00 \uac00\uc7a5 \ub0ae\uc740 \ud504\ub85c\uc138\uc2a4\uac00 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\ub97c \ud544\uc694\ud55c \ub9cc\ud07c \uc0dd\uc131\ud560 \uac83\uc774\ub2e4. \ub110\ub9ac \uc4f0\uc774\ub294 \uc6f9\uc11c\ubc84\uc5d0\uc11c \uc11c\ubc84 \uc2a4\ub808\ub4dc\ub97c \ubbf8\ub9ac \ud560\ub2f9\ud558\ub294 \uc774\ub7ec\ud55c \uae30\ubc95\uc744 \uad6c\ud604\ud558\uace0 \uc788\ub2e4(\uc608\ub97c \ub4e4\uc5b4 \ub137\uc2a4\ucf00\uc774\ud504 \uc11c\ubc84, \uc544\ud30c\uce58 \uc11c\ubc84\uac00 \uc788\ub2e4).<br \/><br \/>\uc9c0\uc5f0\ub418\ub294 \ud504\ub85c\uc138\uc2a4 \ud560\ub2f9<br \/><br \/>\uc77c\ubc18\uc801\uc778 \uacbd\uc6b0 \uc694\uccad\uc744 \ucc98\ub9ac\ud558\ub294 \uc11c\ubc84 \ud504\ub85c\uc138\uc2a4\uc758 \uc218\ud589 \uc2dc\uac04\uc774 \ub9e4\uc6b0 \uc9e7\uc744 \ub54c, \ud56d\uc0c1 \ub3d9\uc2dc\uc5d0 \ucc98\ub9ac\ud560 \ud544\uc694\uac00 \uc788\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4. \ubc18\ubcf5\uc801\uc778 \uc11c\ubc84\ub294 \ucee4\ub110\uc774 \ucee4\ub110 \ubaa8\ub4dc\uc640 \uc0ac\uc6a9\uc790 \ubaa8\ub4dc\ub97c \uc804\ud658\ud558\ub294 \ubd80\ud558\ub97c \uc904\uc784\uc73c\ub85c\uc368 \ub354 \ub098\uc740 \uc131\ub2a5\uc744 \ubcf4\uc778\ub2e4. \ub3d9\uc2dc\uc801 \ucc98\ub9ac\uc640 \ubc18\ubcf5\uc801 \ucc98\ub9ac\uc758 \uc124\uacc4\ub97c \uacb0\ud569\ud55c \ubc29\ubc95\uc740 \uc0c8\ub85c\uc6b4 \uc11c\ubc84\uc758 \ud560\ub2f9\uc744 \uc9c0\uc5f0\ud558\ub294 \uac83\uc774\ub2e4. \uc11c\ubc84\ub294 \uc694\uccad\uc744 \ubc18\ubcf5\uc801\uc73c\ub85c \ucc98\ub9ac\ud558\uae30 \uc2dc\uc791\ud55c\ub2e4. \uc694\uccad\uc5d0 \ub300\ud55c \ucc98\ub9ac <br \/>\uc2dc\uac04\uc774 \uc0c1\ub2f9\ud788 \uac78\ub9b0\ub2e4\uba74 \uadf8 \ucc98\ub9ac\ub97c \ub9c8\ubb34\ub9ac\ud558\uae30 \uc704\ud574\uc11c \uac01\uac01\uc758 \ubd80 \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud55c\ub2e4. \ub530\ub77c\uc11c, \uc8fc \ud504\ub85c\uc138\uc2a4\ub294 \uc0c8\ub85c\uc6b4 \ubd80 \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud558\uae30 \uc804\uc5d0 \uc694\uccad\uc774 \uc720\ud6a8\ud55c\uc9c0 \uc810\uac80\ud558\uace0 \ub610\ub294 \ucc98\ub9ac \uc2dc\uac04\uc774 \uc9e7\uc740 \uc694\uccad\uc744 \ucc98\ub9ac\ud55c\ub2e4.<br \/>\uc9c0\uc5f0\ub41c \ud504\ub85c\uc138\uc2a4 \ud560\ub2f9\uc744 \uc0ac\uc6a9\ud558\uae30 \uc704\ud574\uc11c\ub294 \ub9ac\uc2a4\ud2b8 5\uc5d0\uc11c \ubcfc \uc218 \uc788\ub294 \uac83\ucc98\ub7fc alarm() \ud638\ucd9c\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \uc8fc \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \ud0c0\uc774\uba38\ub97c \uc0dd\uc131\ud558\uace0, \uc2dc\uac04\uc774 \ucd08\uacfc\ub418\uba74 \uc2dc\uadf8\ub110 \ud578\ub4e4\ub7ec\uac00 \ud638\ucd9c\ub41c\ub2e4. fork() \uc2dc\uc2a4\ud15c \ud638\ucd9c\uc740 \ud578\ub4e4\ub7ec \uc548\uc5d0\uc11c \uc218\ud589\ub41c\ub2e4. <br \/>\ubd80\ubaa8\ub294 \uc694\uccad \ubc1b\ub294 \uc811\uc18d \ud1b5\ub85c\ub97c \ub2eb\uace0 accept \uc0c1\ud0dc\ub97c \ub9ac\ud134\ud55c\ub2e4. \ubc18\uba74\uc5d0 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 \uc694\uccad\uc744 \ucc98\ub9ac\ud55c\ub2e4. setjmp() \uc2dc\uc2a4\ud15c \ud638\ucd9c\uc740 \ud504\ub85c\uc138\uc2a4 \uc2a4\ud0dd \ud658\uacbd\uc758 \uc0c1\ud0dc\ub97c \uae30\ub85d\ud55c\ub2e4. longjmp()\uac00 \ub098\uc911\uc5d0 \ud638\ucd9c\ub420 \ub54c, \ud504\ub85c\uc138\uc2a4\ub294 setjmp()\ub85c \uc800\uc7a5\ub41c \uac83\uacfc \uac19\uc740 \uc0c1\ud0dc\ub85c \ubcf5\uad6c\ud55c\ub2e4. longjmp()\uc758 \ub450 \ubc88\uc9f8 \uc778\uc790\ub294 \uc2a4\ud0dd\uc774 \ubcf5\uad6c\ub420 \ub54c setjmp()\uc5d0\uc11c \ub9ac\ud134\ub41c \uac12\uc774\ub2e4.<br \/><\/P>\n<P>-----------------------------------------------------------<br \/>\ub9ac\uc2a4\ud2b8 5 : \uc9c0\uc5f0\ub41c\ud504\ub85c\uc138\uc2a4 \ud560\ub2f9<br \/>\/* Listing 5:<br \/>* delayed the allocation of new server <br \/>* processes Ivan Griffin (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>) *\/<br \/>#include &lt;unistd.h&gt;<br \/>#include &lt;setjmp.h&gt;<br \/>#include &lt;signal.h&gt;<br \/><\/P>\n<P>static void _AlarmHandler(int);<br \/><\/P>\n<P>jmp_buf env = { 0 };<br \/><\/P>\n<P>const int NUMBER_SECONDS = 5; <br \/><\/P>\n<P>\/* depends on particular application *\/ <br \/>struct sigaction alarmAction = <br \/>{<br \/>_AlarmHandler, 0, SA_RESTART, NULL<br \/>};<br \/><\/P>\n<P>int main(void)<br \/>{<br \/>&nbsp; &nbsp; \/* usual daemon\/socket stuff goes here*\/<br \/>&nbsp; &nbsp; sigaction(SIGALRM, &amp;alarmAction, NULL);<br \/>&nbsp; &nbsp; for (;;)<br \/>&nbsp; &nbsp; {<br \/>&nbsp; &nbsp; &nbsp; &nbsp; \/* block here on accept() call*\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; (void) alarm(NUMBER_SECONDS);<\/P>\n<P><br \/>&nbsp; &nbsp; &nbsp; &nbsp; if (setjmp(env) != SIGALRM) <br \/>&nbsp; &nbsp; &nbsp; &nbsp; \/* if SIGALRM is returned =&gt; parent *\/<br \/>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;{<br \/>&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;\/* request processing is performed here if slave, perhaps exit at end? *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; }<br \/>&nbsp; &nbsp;&nbsp; }<\/P>\n<P><br \/>&nbsp; &nbsp; \/* never reached *\/<br \/>&nbsp; &nbsp; return 0;<br \/>}<\/P>\n<P><br \/>void _AlarmHandler(int signal)<br \/>{<br \/>&nbsp; &nbsp; int pid = fork();<br \/>&nbsp; &nbsp; switch (pid)<br \/>&nbsp; &nbsp; {<br \/>&nbsp; &nbsp; &nbsp; &nbsp; case -1: perror(\"fork()\");<br \/>&nbsp; &nbsp; &nbsp; &nbsp; exit(1);<br \/>&nbsp; &nbsp; &nbsp; &nbsp; break;<br \/>&nbsp; &nbsp; &nbsp; &nbsp; case 0: \/* child *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; break;<br \/>&nbsp; &nbsp; &nbsp; &nbsp; default: \/* parent *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; longjmp(env, SIGALRM); \/* indicate&nbsp; by returning SIGALRM *\/<br \/>&nbsp; &nbsp; &nbsp; &nbsp; break;<br \/>&nbsp; &nbsp; }<br \/>}<br \/>-------------------------------------------------------------<br \/><br \/>\uc2a4\ub808\ub4dc<br \/><br \/>\uc608\uc81c\uc758 \ud504\ub85c\uc138\uc2a4 \ubcf5\uc81c\ub294 \uc0c8\ub85c\uc6b4 \uc2e4\ud589 \uc2a4\ub808\ub4dc\ub97c \uc0dd\uc131\ud560 \ub54c \ud504\ub85c\uc138\uc2a4 \uc804\uccb4\ub97c \ubaa8\ub450 \ubcf5\uc81c\ud558\ub294 \ub300\uc2e0 pthread_create()\ub97c \ud638\ucd9c\ud560 \uc218 \uc788\ub2e4. \uc774\uc804\uc5d0 \uc124\uba85\ud588\ub4ef\uc774 \ud55c \uc2a4\ub808\ub4dc\uc5d0\uc11c\uc758 I\/O \ube14\ub7ed\uc774 \ub2e4\ub978 \uc2a4\ub808\ub4dc\uc758 CPU \uc0ac\uc6a9\uad8c\uc744 \ubaa8\ub450 \uc810\uc720\ud558\uc9c0 \uc54a\ub3c4\ub85d \ud558\ub824\uba74 \uc2a4\ub808\ub4dc\ub294 \ucee4\ub110 \uc218\uc900 \uc2a4\ub808\ub4dc\uac00 \ub418\uc5b4\uc57c \ud55c\ub2e4. <\/P>\n<P>\uc5ec\uae30\uc5d0\ub294 Xavier Leroy \uc528\uc758 \ud6cc\ub96d\ud55c \ucee4\ub110 \uc218\uc900 \ub9ac\ub205\uc2a4 \uc2a4\ub808\ub4dc \ud328\ud0a4\uc9c0(<a class=\"con_link\" href=\"http:\/\/pauillac.inria.fr\/~xleroy\/linuxthreads\/\" target=\"_blank\" rel=\"noopener\">http:\/\/pauillac.inria.fr\/~xleroy\/linuxthreads\/<\/A>)\uac00 \uc788\ub294\ub370 \uc774\ub294 clone() \uc2dc\uc2a4\ud15c \ud638\ucd9c\uc5d0 \uae30\ubc18\uc744 \ub450\uace0 \uc788\ub2e4.<br \/>\uc2a4\ub808\ub4dc\ub97c \uc774\uc6a9\ud558\uc5ec \uad6c\ud604\ud558\ub294 \uac83\uc740 \ub2e4\uc911 \ud504\ub85c\uc138\uc2a4 \ubaa8\ub378\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\ubcf4\ub2e4 \ub354 \ubcf5\uc7a1\ud55c \ubb38\uc81c\uac00 \ub098\ud0c0\ub09c\ub2e4. \ub2f9\uc5f0\ud55c \uc774\uc57c\uae30\uc9c0\ub9cc \uc2a4\ub808\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \ucee4\ub110\uc774 \ucee4\ub110 \ubaa8\ub4dc-\uc0ac\uc6a9\uc790 \ubaa8\ub4dc\ub97c \uc804\ud658\ud558\ub294 \uc2dc\uac04\uacfc \uba54\ubaa8\ub9ac \uc0ac\uc6a9\ub7c9\uc744 \ud6a8\uacfc\uc801\uc73c\ub85c \uc904\uc77c \uc218 \uc788\ub2e4. \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130\ub97c \uc774\uc6a9\ud558\uac70\ub098\uc784\uacc4\uc601\uc5ed\uc758 \ubcf4\ud638\uc640 \uac19\uc740 \ub2e4\ub978 \ubb38\uc81c\ub3c4 \ub098\ud0c0\ub09c\ub2e4.<br \/>\ub300\ubd80\ubd84\uc758 \uc6b4\uc601\uccb4\uacc4\uc5d0\uc11c\ub294 \ud504\ub85c\uc138\uc2a4\uac00 \uc5f4 \uc218 \uc788\ub294 \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130\uc758 \uac1c\uc218\ub97c \uc81c\ud55c\ud558\uace0 \uc788\ub2e4. \ud504\ub85c\uc138\uc2a4\uac00 getrlimit()\uc640 setrlimit() \ud638\ucd9c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc774\ub97c \uc2dc\uc2a4\ud15c \ucc28\uc6d0\uc5d0\uc11c \ucd5c\ub300\uac12\uc73c\ub85c \ub298\ub9b4 \uc218 \uc788\uc9c0\ub9cc \uc774 \uac12\uc740 \ubcf4\ud1b5 \/usr \/include\/ sys\/param.h \ud30c\uc77c\uc758 NOFILE\uc5d0 256\uc73c\ub85c \uc815\uc758\ub418\uc5b4 \uc788\ub2e4.<br \/>NOFILE\uacfc \/usr\/src\/linux\/include\/lin ux\/fs.h \ud30c\uc77c\uc758 NR_OPEN\uacfc NR_FILE\uc744 \uace0\uccd0\uc11c \ucee4\ub110\uc744 \uc7ac\ucef4\ud30c\uc77c \ud558\ub294 \uac83\uc740 \ubcc4 \ub3c4\uc6c0\uc774 \ub418\uc9c0 \uc54a\uc744 \uc218\ub3c4 \uc788\ub2e4. \ub9ac\ub205\uc2a4 FILE \uad6c\uc870\uccb4\uc758 fileno \uc694\uc18c(\ub9ac\ub205\uc2a4\uc5d0\uc11c\ub294 \ubcf4\ud1b5 _fileno\ub85c \ubd88\ub9b0\ub2e4)\uc758 \uc790\ub8cc\ud615\uc740 INT\ub85c \uc774\ub294 \ubcf4\ud1b5 \ub2e4\ub978 \uc2dc\uc2a4\ud15c\uc5d0\uc11c unsigned char\uac00 \ub418\ubbc0\ub85c \ubc84\ud37c\ub9c1 \ud558\ub294 \uc785\ucd9c\ub825 \ud568\uc218(fopen(), fprintf() \ub4f1)\uc758 \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130\uc758 \uac1c\uc218\ub97c 255\uac1c\ub85c \uc81c\ud55c\ud55c\ub2e4. <br \/>\uc774\ub7ec\ud55c \ucc28\uc774\ub294 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc758 \uc774\uc2dd\uc131\uc5d0 \uc601\ud5a5\uc744 \ubbf8\uce5c\ub2e4.<br \/>\uc2a4\ub808\ub4dc\ub294 \uba54\ubaa8\ub9ac \uacf5\uac04\uc744 \uacf5\uc720\ud558\uc5ec \uc0ac\uc6a9\ud558\ubbc0\ub85c, \uadf8 \uacf5\uac04\uc774 \uc77c\uad00\uc131 \uc788\ub294 \uc0c1\ud0dc\ub85c \uc720\uc9c0\ub418\uace0 \uac01\uc790\uc758 \uba54\ubaa8\ub9ac \uc601\uc5ed\uc744 \uce68\ubc94\ud558\uc9c0 \uc54a\ub294\uc9c0 \ud655\uc2e4\ud788 \ud558\ub294 \uc8fc\uc758\uac00 \ud544\uc694\ud558\ub2e4. \uc774\ub294 \uc5ec\ub7ec \uac1c\uc758 \uc2a4\ub808\ub4dc(\uc784\uacc4 \uc601\uc5ed)\uac00 \uacf5\uc720\ud558\uba74\uc11c \uc811\uadfc\ud560 \uc218 \uc788\ub294 \uc790\ub8cc\ub97c \uae30\ub85d\ud558\ub294\ub370 \ucc28\ub840\ub97c \ub9de\ucd9c \ud544\uc694\uac00 \uc788\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc774\ub294 \ub77d(lock)\uc744 \uc774\uc6a9\ud558\uc5ec \uad6c\ud604\ud560 \uc218 \uc788\uc9c0\ub9cc \ub370\ub4dc\ub77d \uc0c1\ud0dc\uc5d0 \ub4e4\uc5b4\uac00\uc9c0 \uc54a\ub3c4\ub85d \uc8fc\uc758\ub97c \uae30\uc6b8\uc77c \ud544\uc694\uac00 \uc788\ub2e4.<br \/><br \/>init \uc5d0\uc11c \uc77c\uc5b4\ub098\ub294 \ubb38\uc81c<br \/><br \/>init\uc758 \uc8fc\ub41c \uc5ed\ud560\uc740 \/etc\/inittab\uc5d0 \uc800\uc7a5\ub41c \uc815\ubcf4\ub97c \uc77d\uc5b4 \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \uac83\uc774\ub2e4. \uc774\ub294 \uc9c1\uc811\uc801\uc73c\ub85c \ub610\ub294 \uac04\uc811\uc801\uc73c\ub85c \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc0ac\uc6a9\uc790\uac00 \uc0dd\uc131\ud55c \ubaa8\ub4e0 \ud504\ub85c\uc138\uc2a4\uc5d0 \ucc45\uc784\uc744 \uc9c4\ub2e4. \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uc5c8\uc744 \ub54c\ub294 \ub2e4\uc2dc \uc2dc\uc791\ud558\ub3c4\ub85d \ud560 \uc218\ub3c4 \uc788\ub2e4.<br \/>init\uac00 \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud558\ub294 \ub2a5\ub825\uc740 \ub9ac\uc2a4\ud2b8 1\uc5d0\uc11c \ub370\ubaac\uc774 \ud504\ub85c\uc138\uc2a4\ub97c \ubcf5\uc81c\ud558\ub294 \uacbd\uc6b0 \uc0c1\ub2f9\ud788 \uc774\ud574\ud558\uae30 \uc5b4\ub835\uac8c \ub41c\ub2e4. \uc790\uc2dd \ub370\ubaac\uc740 \uacc4\uc18d \uc2e4\ud589\ub418\uba74\uc11c \ucd5c\ucd08\uc758 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub294 \ubc14\ub85c \uc885\ub8cc\ud558\uace0, init\ub294 \ub370\ubaac\uc774 \uc8fd\uc740 \uac83\uc744 \uc758\ubbf8\ub85c \uc774\ub97c \uac00\uc838\uc628\ub2e4. \uac04\ub2e8\ud55c \ud574\uacb0\ucc45\uc740 \ub370\ubaac\uc5d0\uac8c \ud504\ub85c\uc138\uc2a4 \ubcf5\uc81c\ud558\ub294 \ucf54\ub4dc\ub97c \ud53c\ud55c\ub2e4\ub294 \uac83\uc744 \uc54c\ub824\uc8fc\uae30 \uc704\ud558\uc5ec \ub370\ubaac\uc5d0 \uba85\ub839\ud589 \uc2a4\uc704\uce58(\uc544\ub9c8 -init\uac00 \ub420 \uac83\uc774\ub2e4)\ub97c \ub367\ubd99\uc774\ub294 \uac83\uc774\ub2e4. \ub354 \ub098<br \/>\uc740 \ud574\uacb0\ucc45\uc740 \ub370\ubaac\uc774 \/etc\/inittab\uc5d0\uc11c\ubcf4\ub2e4 \/etc\/rc \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \uc2dc\uc791\ud558\ub3c4\ub85d \ud558\ub294 <br \/>\uac83\uc774\ub2e4.<br \/><br \/>SVR4 \ud615\ud0dc\uc758 \/etc\/rc<br \/><br \/>\uc2dc\uc2a4\ud15c V \ud615\ud0dc\uc758 \/etc\/rc \ubc30\uce58\ub294 \ub110\ub9ac \uc4f0\uc774\ub294 \ub9ac\ub205\uc2a4 \ubc30\ud3ec\ubcf8\uc778 \ub808\ub4dc\ud587\uacfc \ub370\ube44\uc548\uc5d0\uc11c \uc4f0\uc778\ub2e4. \uc774\ub4e4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc2dc\uc791\/\uc885\ub8cc \ud560 \uc218 \uc788\ub294 \uac01 \ub370\ubaac\uc740 \ub808\ub4dc\ud587\uc758 \uacbd\uc6b0 \/etc\/rc\/init.d, \ub370\ube44\uc548\uc758 \uacbd\uc6b0 \/etc\/init.d\uc5d0 \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc788\ub2e4. \uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \ud558\ub098\uc758 \uba85\ub839\ud589 \uc778\uc790\uc778 start\uc640 \ud568\uaed8 \ub370\ubaac\uc744 \uc2dc\uc791\ud558\ub3c4\ub85d \ud558\uace0 stop \uc778\uc790\ub97c \uc8fc\uc5b4 \ub370\ubaac\uc758 \uc2e4\ud589\uc744 \uba48\ucd9c \uc218 \uc788\ub2e4. \uc774 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \uc77c\ubc18\uc801\uc73c\ub85c \ub370\ubaac\uc5d0 \ub530\ub77c \uc774\ub984\uc744 \ubd99\uc778\ub2e4.<br \/>\uc5ec\ub7ec\ubd84\uc774 \ud2b9\uc815\ud55c \uc2e4\ud589 \ub2e8\uacc4\uc5d0\uc11c \ub370\ubaac\uc744 \uc2dc\uc791\ud558\uae30\ub97c \uc6d0\ud55c\ub2e4\uba74 \uc2e4\ud589 \ub2e8\uacc4 \ub514\ub809\ud130\ub9ac\uc5d0\uc11c \/etc\/rc\/init.d\uc5d0 \uc788\ub294 \uc801\ub2f9\ud55c \uc2a4\ud06c\ub9bd\ud2b8\uc5d0 \ub9c1\ud06c\ub97c \uac78\uc5b4 \uc904 \ud544\uc694\uac00 \uc788\ub2e4. <br \/>\uc5ec\ub7ec\ubd84\uc740 \uc2dc\uc791 \ub9c1\ud06c\uc758 \uc774\ub984\uc744 Sxxfoobar\uc774\ub77c \ubd99\uc5ec\uc57c \ud558\ub294\ub370 foobar\ub294 \ub370\ubaac\uc758 \uc774\ub984\uc774\uace0 xx\uc758 \ub450\uc790\ub9ac\uc218\uc758 \uc22b\uc790\uc774\ub2e4. \uc774 \uc22b\uc790\ub294 \uc2a4\ud06c\ub9bd\ud2b8\uac00 \uc2e4\ud589\ud558\ub294 \uc21c\uc11c\ub97c \ubc30\uc5f4\ud558\ub294\ub370 \uc4f0\uc778\ub2e4.<br \/>\uc774\uc640 \ube44\uc2b7\ud558\uac8c \uc5ec\ub7ec\ubd84\uc774 \ud2b9\uc815\ud55c \uc2e4\ud589 \ub2e8\uacc4\ub85c \ubcc0\uacbd\ud560 \ub54c \ub370\ubaac\uc758 \uc2e4\ud589\uc774 \ub05d\ub098\uae30\ub97c \uc6d0\ud55c\ub2e4\uba74 \uc2e4\ud589 \ub2e8\uacc4 \ub514\ub809\ud130\ub9ac\uc5d0\uc11c \/etc\/rc\/init.d \uc2a4\ud06c\ub9bd\ud2b8\uc5d0 \ud574\ub2f9\ud558\ub294 \ub9c1\ud06c\ub97c \uac78\uc5b4\uc8fc\uc5b4\uc57c \ud55c\ub2e4. \uc774\ub7ec\ud55c \ub9c1\ud06c\ub294 Kxxfoobar\ub85c \uc774\ub984 \ubd99\uc5ec\uc57c \ud558\ub294\ub370 \uc2dc\uc791 \ub9c1\ud06c\uc640 \uac19\uc740 \uaddc\uce59\uc744 \ub530\ub978\ub2e4.<br \/>\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790\uac00 (\/etc\/rc\/init.d\uc5d0\uc11c \uc801\ub2f9\ud55c \uc2a4\ud06c\ub9bd\ud2b8\ub97c \ud638\ucd9c\ud558\uace0, \uc54c\ub9de\uc740 \uba85\ub839\ud589 \uc778\uc790\ub97c \uac00\uc9c0\uace0)\ub370\ubaac\uc744 \uc2dc\uc791\/\uc885\ub8cc\ud558\ub294 \uac83\uc740 \uc774\uc804\uc758 BSD \ubc29\uc2dd\uc758 \/etc\/rc.d \ubc30\uce58\ubcf4\ub2e4 \ud6e8\uc52c \uc720\uc5f0\uc131\uc744 \uc9c0\ub2c8\uace0 \uc788\uc73c\uba70 \uc2dc\uc2a4\ud15c V\uc758 \uad6c\uc870\uc5d0\uc11c \ub354 \ud5a5\uc0c1\ub41c \uc7a5\uc810 \uc911 \ud558\ub098\uc774\ub2e4.<br \/>\ub9ac\uc2a4\ud2b8 6\uc758 \uc178 \uc2a4\ud06c\ub9bd\ud2b8\ub294 \uc77c\ubc18\uc801\uc778 \ub808\ub4dc\ud587 \ubc29\uc2dd\uc73c\ub85c \/etc\/rc\/init.d\uc758 foobar \ub370<br \/>\ubaac\uc744 \ub2e4\ub8e8\ub294 \uc608\uc81c\ub97c \ubcf4\uc5ec\uc900\ub2e4.<br \/><\/P>\n<P>&nbsp;<\/P>\n<P>&nbsp;<\/P>\n<P>----------------------------------------------------------<br \/>\ub9ac\uc2a4\ud2b8 6 : SysV init \uc2a4\ud06c\ub9bd\ud2b8 \uc608\uc81c<br \/>#!\/bin\/sh<br \/># Listing 6:<br \/># Sample SysV init script<br \/># Ivan Griffin (<a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A>)<br \/># Source Red Hat function library<br \/>. \/etc\/rc.d\/init.d\/functions<br \/># Source networking configuration.<br \/>. \/etc\/sysconfig\/network<br \/># Check that networking is up<br \/>[ ${NETWORKING} = no ] &amp;&amp; exit 0<br \/>case $1 in<br \/>start)<br \/>echo -n Starting daemon foobar: <br \/>daemon foobar<br \/>echo<br \/>;;<br \/>stop)<br \/>echo -n Shutting down daemon foobar: <br \/>killproc foobar<br \/>echo<br \/>;;<br \/>*)<br \/>echo Usage: foobar {start|stop}<br \/>exit 1<br \/>esac<br \/>-----------------------------------------------------------<br \/><br \/>syslog() \uc0ac\uc6a9\ud558\uae30<br \/><br \/>\ub370\ubaac\uc774 \ub514\ubc84\uae45\ud558\uac70\ub098 \uc2dc\uc2a4\ud15c \uad00\ub9ac\/\uc720\uc9c0 \ubcf4\uc218\ub97c \uc704\ud574\uc11c \uc790\uc2e0\uc758 \ud65c\ub3d9\uc744 \uae30\ub85d\ud558\ub294 \uae30\ub2a5\uc740 \ub9e4\uc6b0 \uc720\uc6a9\ud558\uac8c \uc4f0\uc778\ub2e4. \uc774\ub294 \ud30c\uc77c\uc744 \uc5f4\uace0 \uc77c\uc5b4\ub09c \uc0ac\uac74\uc744 \uadf8 \ud30c\uc77c\uc5d0 \uae30\ub85d\ud568\uc73c\ub85c\uc368 \uc774\ub8e8\uc5b4\uc9c4\ub2e4. \ub9ce\uc740 \ub9ac\ub205\uc2a4 \ub370\ubaac\uc740 \ub370\ubaac\uc758 \uc0c1\ud0dc\uc640 \uc815\ubcf4\ub97c \uae30\ub85d\ud558\uae30 \uc704\ud574\uc11c syslog() \ud638\ucd9c\uc744 \uc0ac\uc6a9\ud55c\ub2e4. syslog\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8 \uc11c\ubc84 \uae30\ub85d \uae30\ub2a5\uc73c\ub85c \uc6d0\ub798\ub294 BSD 4.2\uc5d0 \uae30\ubc18\uc744 \ub454\ub2e4. SVR4\ub098 POSIX\uc5d0\uc11c \uac19\uc740 \uae30\ub2a5\uc744 \ud558\ub294 \uac83\uc740 \uc5c6<br \/>\ub294 \uac83\uc73c\ub85c \ubcf4\uc778\ub2e4. syslog \uc11c\ube44\uc2a4\uc758 \uba54\uc2dc\uc9c0\ub294 \/etc\/syslog.conf\uc5d0 \uc4f0\uc5ec \uc788\ub294 \ubb38\uc11c \ud30c\uc77c\uc5d0\uc11c \ubcfc \uc218 \uc788\ub294\ub370 syslogd \ub370\ubaac\uc744 \uc2e4\ud589\ud558\ub294 \uc6d0\uaca9 \uba38\uc2e0\uc5d0\uc11c \ubc1b\uc744 \uc218\ub3c4 \uc788\ub2e4.<br \/>\ub9ac\ub205\uc2a4 syslog \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud558\ub2e4. \uc138 \uac00\uc9c0 \ud568\uc218\uac00 <br \/>\/usr\/include\/syslog.h\uc5d0 \uc815\uc758\ub418\uc5b4 \uc788\ub2e4(syslog.3 \ub9e4\ub274\uc5bc \ud398\uc774\uc9c0\ub97c \ucc38\uc870).<br \/><br \/>void openlog(char *ident, int option, int facility);<br \/>void syslog(int priority, char *format, ...);<br \/>void closelog(void);<br \/><br \/>openlog()\ub294 \uc2dc\uc2a4\ud15c \uae30\ub85d\uae30\uc5d0 \uc811\uc18d\uc744 \uc0dd\uc131\ud55c\ub2e4. ident \ubb38\uc790\uc5f4\uc740 \uac01\uac01\uc758 \uae30\ub85d\ub418\ub294 \uba54\uc2dc\uc9c0\uc5d0 \ubd99\uac8c \ub418\ub294\ub370 \ubcf4\ud1b5 \ub370\ubaac\uc758 \uc774\ub984\uc774 \ub41c\ub2e4. option \uc778\uc790\ub294 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c \uacbd\uc6b0 \ucf58\uc194\uc5d0 \uae30\ub85d\ud560\uc9c0, \ud45c\uc900 \uc5d0\ub7ec\uc5d0 \uae30\ub85d\ud560\uc9c0, \ud504\ub85c\uc138\uc2a4 \ubc88\ud638\ub97c \uae30\ub85d\ud560\uc9c0\ub97c \uc9c0\uc815\ud55c\ub2e4. facility \uc778\uc790\ub294 \uba54\uc2dc\uc9c0\ub97c \uae30\ub85d\ud558\ub294 \ud504\ub85c\uadf8\ub7a8\uc774\ub098 \ub370\ubaac\uc758 \ud615\ud0dc\ub97c \ubd84\ub958\ud558\ub294\ub370 \uae30\ubcf8\uac12\uc740 LOG_USER\uc774\ub2e4.<br \/>syslog() \ud638\ucd9c\uc740 \uc2e4\uc81c\ub85c \uae30\ub85d\uc744 \ud558\uac8c \ub41c\ub2e4. format\uc758 \uac12\uacfc \ubcc0\uc218 \uc778\uc790\ub294 printf() \uc5d0\uc11c \ubcfc \uc218 \uc788\ub294 \uac83\uacfc \ube44\uc2b7\ud55c\ub370 \uc608\uc678\uac00 \uc788\ub2e4\uba74 %m\uc740 \ud604\uc7ac errno\uac12\uc5d0 \ud574\ub2f9\ud558\ub294 \uc5d0\ub7ec \uba54\uc2dc\uc9c0\ub85c \ub300\uce58\ub41c\ub2e4\ub294 \uac83\uc774\ub2e4. priority \uc778\uc790\ub294 \uba54\uc2dc\uc9c0\uac00 \uae30\ub85d\ub420 \ub54c \uba54\uc2dc\uc9c0\uc758 \ud615\ud0dc\uc640 \uc911\uc694\ub3c4\ub97c \uac00\ub9ac\ud0a8\ub2e4.<br \/>\uc2dc\uc2a4\ud15c \uae30\ub85d\uae30\uc640\uc758 \uc811\uc18d\uc744 \ub04a\uace0 \uad00\ub828\ub41c \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130\uc640 \uc18c\ucf13\uc744 \ub2eb\uc73c\ub824\uba74 closel og()\ub97c \uc0ac\uc6a9\ud55c\ub2e4. openlog()\uc640 closelog()\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc120\ud0dd\uc0ac\ud56d\uc774\ub2e4. <br \/>\uc774 \ud568\uc218\uc5d0 \ub300\ud55c \ub354 \uc790\uc138\ud55c \uc815\ubcf4\ub294 syslog(3) \ub9e4\ub274\uc5bc \ud398\uc774\uc9c0\uc5d0\uc11c \ubcfc \uc218 \uc788\ub2e4.<br \/><br \/><br \/>Ivan Griffin\uc528\ub294 \uc544\uc77c\ub79c\ub4dc Limerick \ub300\ud559\uc5d0\uc11c \uc804\uc790, \ucef4\ud4e8\ud130 \uacf5\ud559\uacfc\uc758 \ub300\ud559\uc6d0\uc0dd<br \/>\uc774\ub2e4. <br \/>\uadf8\uc758 \uad00\uc2ec\ubd84\uc57c\ub294 C++\/\uc790\ubc14, WWW, ATM, UL \ucef4\ud4e8\ud130 \ubaa8\uc784 (<a class=\"con_link\" href=\"http:\/\/www.csn.ul.ie\/\" target=\"_blank\" rel=\"noopener\">http:\/\/www.csn.ul.ie\/<\/A>)\uc640 \ubb3c\ub860 \ub9ac\ub205\uc2a4\ub3c4 \ud3ec\ud568\ub41c\ub2e4 (<a class=\"con_link\" href=\"http:\/\/www.trc.ul.ie\/~griffini\/linux.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.trc.ul.ie\/~griffini\/linux.html<\/A>). \uadf8\uc758 \uc804\uc790\uc6b0\ud3b8 \uc8fc\uc18c\ub294 <br \/><a class=\"con_link\" href=\"mailto:NOSPAM.ivan.griffin@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">ivan.griffin@ul.ie<\/A> \uc774\ub2e4.<br \/><br \/>John Nelson \ubc15\uc0ac\ub294 Limerick \ucef4\ud4e8\ud130 \uacf5\ud559\uacfc\uc758 \uad50\uc218\uc774\ub2e4. \uadf8\uc758 \uad00\uc2ec\uc0ac\ub294 \uc774\ub3d9 \ud1b5\uc2e0, \uc9c0\ub2a5\ud615 \ub124\ud2b8\uc6cc\ud06c, \uc18c\ud504\ud2b8\uc6e8\uc5b4 \uacf5\ud559\uacfc VLSI \uc124\uacc4 \ub4f1\uc774\ub2e4. \uadf8\uc758 \uc804\uc790\uc6b0\ud3b8 \uc8fc\uc18c\ub294 <a class=\"con_link\" href=\"mailto:NOSPAM.john.nelson@ul.ie.NOSPAM\" target=\"_blank\" rel=\"noopener\">john.nelson@ul.ie<\/A>\uc774\ub2e4.<br \/><\/P>\n","protected":false},"excerpt":{"rendered":"<p>\ub9ac\ub205\uc2a4 \ub124\ud2b8\uc6cc\ud06c \ud504\ub85c\uadf8\ub798\ubc0d2\ubd80\uff1a\ub370\ubaac \ud504\ub85c\uc138\uc2a4 \uc0dd\uc131\ud558\uae30 \uae00\/ Ivan Griffin\uacfc John Nelson \uc5ed\/ \uc774\uae30\ub3d9(\uc790\uc720\uae30\uace0\uac00) \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub294 \uc5ec\ub7ec \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0 \uc11c\ube44\uc2a4\ud558\uae30 \uc704\ud574\uc11c \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc2e4\ud589\ub418\ub294 \uc11c\ubc84\uc774\ub2e4. \uc5ec\ub7ec\ubd84\uc740 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub97c \uc0dd\uc131\ud560 \ub54c \ub2e4\uc74c\uacfc \uac19\uc740 \uba87 \uac00\uc9c0 \uc0ac\ud56d\uc5d0 \uc8fc\uc758\ud558\uc5ec\uc57c \ud55c\ub2e4. \uac1c\ubc1c\ud558\ub294 \ub3d9\uc548 \ub514\ubc84\uae45\ud560 \ub54c printf\ub098 write\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc11c\ubc84\ub97c \ud3ec\uadf8\ub77c\uc6b4\ub4dc\ub85c \uc2e4\ud589\ud558\ub294 \uac83\uc774 \uc88b\ub2e4. \ub610\ud55c, \uc11c\ubc84\uac00 \uc624\ub3d9\uc791 \ud55c\ub2e4\uba74 \uc911\ub2e8 \ubb38\uc790(\ubcf4\ud1b5 CRTL-C)\ub97c \ubcf4\ub0b4\uc5b4 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[22],"tags":[],"class_list":["post-157","post","type-post","status-publish","format-standard","hentry","category-development_unix"],"_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/157","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=157"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/157\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=157"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=157"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=157"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}