{"id":55,"date":"2010-04-17T21:32:03","date_gmt":"2010-04-18T06:32:03","guid":{"rendered":"\/blog\/?p=55"},"modified":"2023-09-21T09:41:21","modified_gmt":"2023-09-21T00:41:21","slug":"comp-unix-programmer-newsgroup-faq-%ed%95%9c%ea%b8%80%eb%b2%88%ec%97%ad%ed%8c%90-part-1","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=55","title":{"rendered":"comp.unix.programmer newsgroup FAQ \ud55c\uae00\ubc88\uc5ed\ud310 Part.1"},"content":{"rendered":"\n<P><FONT size=2 face=\uad74\ub9bc>comp.unix.programmer newsgroup FAQ \ud55c\uae00\ubc88\uc5ed\ud310 Part.1&nbsp; <\/FONT><\/P><FONT size=2 face=\uad74\ub9bc>\n<P><br \/>\ubb38\uc11c\uc81c\ubaa9 : 1. Process Control<br \/>\uc791 \uc131 \uc790 : \uc870\uc131\uc6d0<br \/>\ud3b8 \uc9d1 \uc790 : \ubc15\ubbfc\uc2dd(SADWIND)<br \/>\uc791 \uc131 \uc77c : 2001. 05. 16<br \/>\uc6d0 \ucd9c \ucc98 : <a class=\"con_link\" href=\"http:\/\/www.efefeffang.com\/unix\/faq_toc.html\" target=\"_blank\" rel=\"noopener\">http:\/\/www.efefeffang.com\/unix\/faq_toc.html<\/A><\/P>\n<P>&nbsp;<\/P>\n<P>\uc6d0\ubb38 \ucd9c\ucc98\ub294 \uc704\uc5d0 \uba85\uc2dc\ub41c \uac83\uacfc \uac19\uc2b5\ub2c8\ub2e4.<br \/>1\uc7a5\uc740 \ud504\ub85c\uc138\uc2a4 \uc81c\uc5b4\uc5d0 \uad00\ub828\ub41c \ub0b4\uc6a9\uc785\ub2c8\ub2e4.<br \/>\uc6d0\ub798 About This FAQ\ub780 \ubb38\uc11c\ubd80\ud130 \uc2dc\uc791\ud558\uc9c0\ub9cc.. \uc77c\ub2e8 \uc5ec\uae30\uc11c\ub294 \ube90\uc2b5\ub2c8\ub2e4 \u3161.\u3161<br \/>(SADWIND \u66f0, '\uadf8\uac83\ub450 \ubc88\uc5ed\ud558\ub78f! \u3161.,\u3161)<\/P>\n<P><br \/>1.1 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4 \uc0dd\uc131\ud558\uae30 : fork()<br \/>&nbsp;1.1.1 What does fork() do?<br \/>&nbsp;1.1.2 What's the difference between fork() and vfork() ?<br \/>&nbsp;1.1.3 Why use _exit rather than exit in the child branch of fork ?<br \/>1.2 Environment Variable<br \/>&nbsp;1.2.1 How can I get \/ set a environmet variables from a program?<br \/>&nbsp;1.2.2 How can I read the whole environment ?<br \/>1.3 How can I sleep for less than a second ?<br \/>1.4 How can I get a finer-grained version of alarm() ?<br \/>1.5 How can a parent and child process communicate ?<br \/>1.6 How do I get ird of zombie process ?<br \/>&nbsp;1.6.1 What is a zombie ?<br \/>&nbsp;1.6.2 How do I prevent them from occurring ?<br \/>1.7 How do I get my program act like a daemon ?<br \/>1.8 How can I look at process in the system like ps ?<br \/>1.9 Given a pid , how can I tell if it's a running program ?<br \/>1.10 What's the return value of system\/pclose\/waitpid ?<br \/>1.11 How do I find out about a process's memory usage ?<br \/>1.12 Why do processes never decrease in size?<br \/>1.13 How do I change the name of my program?&nbsp; (as seen by 'ps' )<br \/>1.14 Where do I put my configuration file then ?<br \/>1.15 Why doesn't my process get SIGHUP when parent dies ?<br \/>1.16 How can I kill all descendents of a process ?<\/P>\n<P><br \/>&nbsp;<br \/>1.1 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4 \uc0dd\uc131\ud558\uae30 : fork()<\/P>\n<P>1.1.1 What does fork() do?<br \/>#include &lt;sys\/types.h&gt;<br \/>#include &lt;unistd.h&gt;<\/P>\n<P>pid_t fork(void);<\/P>\n<P>fork() \ud568\uc218\ub294 \uc774\ubbf8 \uc874\uc7ac\ud558\ub294 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574 \uc0ac\uc6a9\ud55c\ub2e4.<br \/>\ub9cc\ub4e4\uc5b4\uc9c0\ub294 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\ub294 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub77c\uace0 \ud558\uba70, \uae30\uc874\uc758 \ud504\ub85c\uc138\uc2a4\ub294 \ubd80\ubaa8\ub77c\uace0 \ubd88\ub9b0\ub2e4.<br \/>\uc6b0\ub9ac\ub294 fork()\uc758 \ubc18\ud658\uac12\uc744 \uac00\uc9c0\uace0 \uad6c\ubd84\ud560 \uc218 \uc788\ub2e4. \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\ub294 \uc0dd\uc131\ub418\ub294 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uc758<br \/>\uc544\uc774\ub514\ub97c \uac16\uace0 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 0\uc744 \uac16\uac8c \ub41c\ub2e4. <br \/>\uadf8\ub7ec\ubbc0\ub85c \ub2e4\uc74c\uacfc \uac19\uc740 \ucf54\ub529\uc774 \uac00\ub2a5\ud558\ub2e4.<\/P>\n<P><br \/>&nbsp;pid_t pid;<br \/>&nbsp;switch (pid = fork() )<br \/>&nbsp;{<br \/>&nbsp; case 1 :<br \/>&nbsp; &nbsp;perror(\"The fork failed ! \\n\");<br \/>&nbsp; &nbsp;break;<br \/>&nbsp; case 0 :<br \/>&nbsp; &nbsp;exit(0);<br \/>&nbsp; default:<br \/>&nbsp; &nbsp;printf(\"Child's pid is %d\\n\",pid);<br \/>&nbsp;}<\/P>\n<P>\ud639\uc740 \ub2e4\uc74c\uacfc \uac19\uc774 \ud560 \uc218\ub3c4 \uc788\ub2e4.<\/P>\n<P>&nbsp;if ( -1 = ( pid = fork() ) )&nbsp; <br \/>&nbsp; perror(\"The fork failed ! \\n\");<br \/>&nbsp;else if( 0 == pid)<br \/>&nbsp; exit(0);<br \/>&nbsp;else <br \/>&nbsp; printf(\"child's pid is %d\\n\",pid);<\/P>\n<P>\uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\ub85c\ubd80\ud130 \ubb34\uc5b8\uac00\ub97c \ubb3c\ub824 \ubc1b\uac8c \ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00<br \/>\uc644\uc804\ud788 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uc640 \uac19\uc740 \uac83\uc740 \uc544\ub2c8\ub77c\uace0 \ubcfc \uc218 \uc788\uaca0\ub2e4. \ubb3c\ub824 \ubc1b\ub294 \uac83\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/P>\n<P>&nbsp; * real\/ effective UID or GID ( Process Credential )<br \/>&nbsp; * \ud658\uacbd\ubcc0\uc218<br \/>&nbsp; * \uc2a4\ud0dd<br \/>&nbsp; * \uba54\ubaa8\ub9ac<br \/>&nbsp; * \uc5f4\ub9b0 \ud30c\uc77c\uae30\uc220\uc790<br \/>&nbsp; * close-on-exec flags<br \/>&nbsp; * \uc2dc\uadf8\ub110 \ud578\ub4e4\ub9c1 \uc124\uc815<br \/>&nbsp; * nice \uac12<br \/>&nbsp; * \uc2a4\ucf00\uc974\ub7ec \ud074\ub798\uc2a4<br \/>&nbsp; * \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9 ID<br \/>&nbsp; * \uc138\uc158 ID<br \/>&nbsp; * \ud604\uc7ac \uc791\uc5c5 \ub514\ub809\ud1a0\ub9ac<br \/>&nbsp; * \ub8e8\ud2b8 \ub514\ub809\ud1a0\ub9ac<br \/>&nbsp; * \ud30c\uc77c \ubaa8\ub4dc \uc0dd\uc131 \ub9c8\uc2a4\ud06c (umask)<br \/>&nbsp; * \ub9ac\uc18c\uc2a4 \ud55c\uacc4\uac12<br \/>&nbsp; * \uc81c\uc5b4 \ud130\ubbf8\ub110<\/P>\n<P>\uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uc5d0\uac8c \uc720\uc77c\ud558\uac8c \ud560\ub2f9\ub418\ub294 \uac83\uc73c\ub85c\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/P>\n<P>&nbsp; * PID (\ud504\ub85c\uc138\uc2a4 \uc544\uc774\ub514)<br \/>&nbsp; * PPID( \uc0c1\uc774\ud55c \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4 ID )<br \/>&nbsp; * \uc790\uc2e0\uc758 \ud30c\uc77c \uae30\uc220\uc790 \ubcf5\uc0ac\ubcf8, \ub514\ub809\ud1a0\ub9ac \uc2a4\ud2b8\ub9bc<br \/>&nbsp; * \ud504\ub85c\uc138\uc2a4 \uc2dc\uac04 ( tms \uad6c\uc870\uccb4 )<br \/>&nbsp; * \ub9ac\uc18c\uc2a4 \uc774\uc6a9\uc774 0\uc73c\ub85c \uc124\uc815\ub428.<br \/>&nbsp; * \uc2dc\uadf8\ub110\uc774 \ube48 \uc9d1\ud569\uc73c\ub85c \ucd08\uae30\ud654 \ub428<br \/>&nbsp; * timer_create\ub85c \uc0dd\uc131\ub41c \uc2dc\uacc4(timer) \uac00 \uc0c1\uc18d\ub418\uc9c0 \uc54a\ub294\ub2e4<br \/>&nbsp; * \ube44\ub3d9\uae30\uc801 \uc785\ucd9c\ub825\uc740 \uc0c1\uc18d\ub418\uc9c0 \uc54a\ub294\ub2e4.<\/P>\n<P>1.1.2 What's the difference between fork() and vfork() ?<br \/>\uc5b4\ub5a4 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 vfork()\uac00 \uc9c0\uc6d0\ub41c\ub2e4. \uc774 \ud568\uc218\ub97c \uc9c0\uc6d0\ud558\ub294 \uc774\uc720\ub294 fork()\uac00 \ud504\ub85c\uc138\uc2a4\uc758<br \/>\uc8fc\uc18c \uacf5\uac04\uc744 \ubaa8\ub450 \ubcf5\uc0ac\ud558\uae30 \ub54c\ubb38\uc5d0 \uc790\uc6d0\uad00\ub9ac \uba74\uc5d0\uc11c \ube44\ud6a8\uc728\uc801\uc774\ub2e4. \uc774\ub97c \ud574\uacb0\ud558\uc5ec \ubd80\ub2f4\uc744<br \/>\uc904\uc5ec\uc8fc\uc790\ub294 \uac83\uc774\ub2e4.<br \/>&nbsp;\ud558\uc9c0\ub9cc vfork()\uac00 \ub3c4\uc785\ub41c \uc774\ud6c4, fork \ud568\uc218\uc5d0 \ub300\ud55c \ubc1c\uc804\uc774 \uc774\ub8e8\uc5b4\uc838, 'copy-on-write' \uc758<br \/>&nbsp;\uac1c\ub150\uc774 \ub3c4\uc785\ub418\uba74\uc11c, \ubd80\ubaa8\uc640 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc11c\ub85c \ubb3c\ub9ac\uc801 \uc8fc\uc18c \uacf5\uac04\uc744 \uacf5\uc720\ud558\uac8c \ub418\uc5c8\ub2e4.<br \/>&nbsp;vfork\ub97c \uc0ac\uc6a9\ud560 \ud544\uc694\uc131\uc774 \uc904\uc5b4\ub4e4\uba74\uc11c, \uacfc\uac70\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c vfork\uc758 \uc0ac\uc6a9\uc740 fork\ub85c \ub2e4\uc2dc<br \/>&nbsp;\ub300\uccb4\ub418\uae30 \uc2dc\uc791\ud558\uc600\ub2e4. <br \/>\ud558\uc9c0\ub9cc vfork\uc758 \uc794\uc7ac\uac00 \ud604\uc7ac\uae4c\uc9c0 \ub0a8\uc544 \uc788\uae30 \ub54c\ubb38\uc5d0 \ud638\ud658\uc131\uc744 \uc704\ud574 vfork \uc2dc\uc2a4\ud15c \ucf5c\uc774 \uc874\uc7ac<br \/>\ud558\uba70, \ub2e8\uc9c0 \uc774\ub984\ubfd0\uc73c\ub85c \ud638\ucd9c \uc2dc\uc5d0 fork\ub97c \ub300\uc2e0 \uc774\uc6a9\ud55c\ub2e4.<br \/>\ub450 \ud568\uc218\uc758 \uadfc\ubcf8\uc801\uc778 \ucc28\uc774\ub294 vfork \uc758 \ud638\ucd9c\uc5d0\uc11c \ud504\ub85c\uc138\uc2a4\uac00 \uc0dd\uc131\ub420 \ub54c\ub294 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 <br \/>execve \ub4f1\uc744 \ud638\ucd9c\ud560 \ub54c\uae4c\uc9c0 \uc7a0\uc2dc \uc77c\uc2dc\uc801\uc73c\ub85c \uc9c0\uc5f0\ub41c\ub2e4\ub294 \uac83\uc774\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc774 \ud568\uc218\ub97c \uc0ac\uc6a9\ud560<br \/>\ub54c\uc5d0\ub294 \ud504\ub85c\uc138\uc2a4 \uc8fc\uc18c \uacf5\uac04\uc758 \ubcc0\uc218\ub97c \uc218\uc815\ud560 \ub54c \uc870\uc2ec\ud574\uc57c \ud55c\ub2e4. \uc989, \ubc18\ud658\uac12\uc744 \uc900\ub2e4\ub4e0\uc9c0,<br \/>exit\ub97c \ud638\ucd9c\ud55c\ub2e4\ub294 \ud589\ub3d9\uc740 \uc790\uc81c\ud558\ub294 \uac83\uc774 \uc88b\uc744 \uac83\uc774\ub2e4.<br \/>\uc774\ub7f0 \uc0ac\uc2e4 ( exit \ub97c \uc790\uc81c\ud558\uace0, _exit\ub97c \ud638\ucd9c\ud558\ub77c\ub294 \uac83\uc740 fork\uc5d0\uac8c\ub3c4 \ud574\ub2f9\ub418\ub294 \uc0ac\ud56d\uc774\ub2e4. )<\/P>\n<P>1.1.3 Why use _exit rather than exit in the child branch of fork ?<br \/>exit\uc640 _exit \ub294 \uc57d\uac04\uc758 \ucc28\uc774\ub97c \ubcf4\uc774\uace0 \uc788\ub2e4.<br \/>\uadfc\ubcf8\uc801\uc778 \ucc28\uc774\ub77c\uace0 \ud560 \uc218 \uc788\ub294 \uc810\uc740, \uc804\uc790\uc758 \uacbd\uc6b0 \uc0ac\uc6a9\uc790 \uacf5\uac04\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \ub77c\uc774\ube0c\ub7ec\uc758 <br \/>\uc81c\uac70 \ud568\uc218\uc774\uace0, \ud6c4\uc790\ub294 \ucee4\ub110\uc5d0\uc11c \uc9c0\uc6d0\ud558\ub294 \uc81c\uac70 \ud568\uc218\ub77c\ub294 \uc810\uc774\ub2e4. <br \/>fork\uc758 \uc790\uc2dd \ubd84\uae30\uc5d0\uc11c exit\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \ud45c\uc900 \uc785\ucd9c\ub825 \ubc84\ud37c\ub97c 2\ubc88\uc774\ub098 flush \ud560 \uc218\ub3c4 <br \/>\uc788\uc73c\uba70, \uc784\uc2dc\uc801 \ud30c\uc77c\uc744 \ub73b\ud558\uc9c0 \uc54a\uac8c \uc9c0\uc6b8 \uc218\ub3c4 \uc788\ub2e4. c++\uc758 \uacbd\uc6b0\ub294 \ub354\uc6b1 \uc2ec\uac01\ud560 \uc218\ub3c4 \uc788\ub2e4.<br \/>static object\uc758 \uc81c\uac70\uc790\uac00 \ube44\uc815\uc0c1\uc801\uc73c\ub85c \ud589\ub3d9 \ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/P>\n<P><br \/>1.2 Environment Variable<\/P>\n<P>1.2.1 How can I get \/ set a environmet variables from a program?<\/P>\n<P>\ud658\uacbd \ubcc0\uc218\ub97c \uac00\uc838\uc624\ub294 \ud568\uc218\ub294 getenv()\uc774\ub2e4.<\/P>\n<P>#include &lt;stdlib.h&gt;<br \/>char * getenv( const char *name);<\/P>\n<P>\ud658\uacbd \ubcc0\uc218\ub97c \uc9c0\uc815\ud558\ub294 \ud568\uc218\ub294 putenv() \uc774\ub2e4.<\/P>\n<P>#include &lt;stdlib.h&gt;<br \/>int putenv (char *string);<\/P>\n<P>putenv\uc5d0 \ub118\uaca8\uc9c0\ub294 \ubb38\uc790\uc5f4\uc740 \uba54\ubaa8\ub9ac \ud574\uc81c\ub418\uc5b4\uc11c\ub294 \uc548\ub41c\ub2e4. \uc65c\ub0d0\ud558\uba74 \uc774\ub97c \uac00\ub9ac\ud0a4\ub294 \ud3ec\uc778\ud130\uac00 <br \/>putenv\uc5d0 \uc758\ud574 \uc720\uc9c0\ub418\uace0 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc989, \uc815\uc801 \ubc84\ud37c\uc5d0 \uc788\uac70\ub098, \ud799\uacf5\uac04 \ubc16\uc5d0 \uc874\uc7ac\ud574\uc57c \ud55c\ub2e4. <br \/>\uadf8 \ubb38\uc790\uc5f4\uc740 \ud658\uacbd \ubcc0\uc218\uac00 \ub610 \ub2e4\ub978 putenv\uc5d0 \uc758\ud574 \uc81c\uac70\ub420 \ub54c\uc57c \ube44\ub85c\uc18c \uba54\ubaa8\ub9ac \ud574\uc81c\ub420 \uc218 \uc788\uac8c<br \/>\ub41c\ub2e4. <br \/>\ud658\uacbd\ubcc0\uc218\ub294 \ud504\ub85c\uc138\uc2a4\uc5d0\uc11c \uc0c1\uc18d\ub418\ub294 \uac83\uc774\ubbc0\ub85c , \ubb3c\ub824 \ubc1b\ub294 \ud504\ub85c\uc138\uc2a4\ub294 \ud658\uacbd\ubcc0\uc218\ub97c \uc218\uc815\ud560 \uc218 <br \/>\uc5c6\uac8c \ub41c\ub2e4. <br \/>\uc608\ub97c \ub4e4\uc5b4 TERM \uc774\ub780 \ud658\uacbd\ubcc0\uc218\ub97c \uc5bb\uace0\uc790 \ud560 \ub54c\ub294 <\/P>\n<P>&nbsp;char * envvar;<br \/>&nbsp;printf( \"The value for the envirionmet variable TERM&nbsp; is :&nbsp; \");<br \/>&nbsp;if (envvar)<br \/>&nbsp;{<br \/>&nbsp; printf( \"%s \\n\",envvar );<br \/>&nbsp;}<br \/>&nbsp;else <br \/>&nbsp;{<br \/>&nbsp; printf(\"not set \\n\");<br \/>&nbsp;}<\/P>\n<P>\uadf8\ub9ac\uace0 \uc0c8\ub85c\uc6b4 \ud658\uacbd\ubcc0\uc218\ub97c \uc9c0\uc815\ud558\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294,<\/P>\n<P>&nbsp;static char envbuf[256];<br \/>&nbsp;sprintf(envbuf, \"MYVAR=%s\",\"MYVAL\");<br \/>&nbsp;if( putenv(envbuf) )<br \/>&nbsp;{<br \/>&nbsp; printf(\"(\"Sorry, putenv() couldn't find the memory for %s\\n\",envbuf);<br \/>&nbsp;}<\/P>\n<P>1.2.2 How can I read the whole environment ?<\/P>\n<P>\ub9cc\uc57d\uc5d0 \ub2f9\uc2e0\uc774 \ud658\uacbd\ubcc0\uc218\ub97c \uc5bb\uace0 \uc2f6\uc740\ub370, \uc774\ub984\uc744 \ubaa8\ub974\ub294 \uacbd\uc6b0, \ud658\uacbd\ubcc0\uc218\uc5d0 \ub300\ud574 \uc870\uae08\ub354 \uc54c\uc544\ubcfc<br \/>\ud544\uc694\uac00 \uc788\uc744 \uac83\uc774\ub2e4. \uc989, \ud658\uacbd\ubcc0\uc218\uac00 \uc5b4\ub5bb\uac8c \uc800\uc7a5\ub418\uc5b4 \uc788\ub294\uac00\ub97c \uc54c\uc544\uc57c \ud560 \uac83\uc774\ub2e4. <br \/>\uc804\uc5ed\ubcc0\uc218 ,environ \ub294 \ud658\uacbd\ubcc0\uc218\uc758 \ubb38\uc790\uc5f4 \ud3ec\uc778\ud130\ub4e4\uc758 array\ub4e4\uc758 \ud3ec\uc778\ud130\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4. \uac01\uac01\uc758<br \/>\ubb38\uc790\uc5f4\ub4e4\uc740 \"NAME=value\"\uc640 \uac19\uc740 \ud615\uc2dd\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4. NULL \ud3ec\uc778\ud130\ub294 \ubb38\uc790\uc5f4\ub4e4\uc758 \uc885\ub8cc\ub97c <br \/>\ud45c\uc2dc\ud55c\ub2e4. <br \/>\ub2e4\uc74c\uc740 \ud604\uc7ac\uc758 \ud658\uacbd\ubcc0\uc218\ub97c \ucd9c\ub825\ud558\ub294 \uac04\ub2e8\ud55c \ud504\ub85c\uadf8\ub7a8\uc774\ub2e4.<\/P>\n<P>&nbsp;#include &lt;stdio.h&gt;<\/P>\n<P>&nbsp;extern char **environ;<\/P>\n<P>&nbsp;int main()<br \/>&nbsp;{ <br \/>&nbsp; char **ep = environ;<br \/>&nbsp; char *p ;<\/P>\n<P>&nbsp; while ( (p&nbsp; = *ep ++))<br \/>&nbsp; &nbsp;printf(\"%s \\n\",p);<\/P>\n<P>&nbsp; return 0;<br \/>&nbsp;}<\/P>\n<P>\uc77c\ubc18\uc801\uc73c\ub85c environ \ubcc0\uc218\ub294 \ubd80\uac00\uc801\uc73c\ub85c main \ud568\uc218\uc758 \uc138\ubc88\uc9f8 \ud30c\ub77c\ubbf8\ud130\ub85c \ub118\uaca8 \ubc1b\ub294\ub2e4. \uc704\uc758<br \/>\ucf54\ub529\uc744 \uc870\uae08 \uace0\uce58\uba74,<\/P>\n<P>&nbsp;#include &lt;stdio.h&gt;<\/P>\n<P>&nbsp;int main (int argc, char **argv, char **envp)<br \/>&nbsp;{<br \/>&nbsp; char *p ;<\/P>\n<P>&nbsp; while (( p = *envp ++ ) )<br \/>&nbsp; &nbsp;printf(\"%s \\n\",p);<\/P>\n<P>&nbsp; return 0;<br \/>&nbsp;}<\/P>\n<P>\ud558\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc740 \uc81c\ub300\ub85c \uc218\ud589\ub420 \uc218 \uc788\uc9c0\ub9cc,&nbsp; POSIX \ud45c\uc900\uc5d0\ub294 \uba85\uc2dc\ub418\uc9c0 \uc54a\uc740 \ubc29\ubc95\uc774\ub2e4.<\/P>\n<P><br \/>1.3 How can I sleep for less than a second ?<\/P>\n<P>sleep \ud568\uc218\ub294 \ub300\ubd80\ubd84\uc758 UNIX \uc2dc\uc2a4\ud15c\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \uac83\uc73c\ub85c \ucd5c\uc18c \ub2e8\uc704\uac00 \ucd08\ub2e8\uc704\uc774\ub2e4. \uc880 \ub354<br \/>\uc815\ubc00\ud55c \uc2dc\uac04 \uc81c\uc5b4\ub97c \uc704\ud574\uc11c\ub294 \uc880 \ub354 \ucc3e\uc544 \ubcf4\uc544\uc57c \ud55c\ub2e4. <\/P>\n<P>&nbsp; * \ub9ce\uc740 \uc2dc\uc2a4\ud15c\ub4e4\uc774 usleep() \ud568\uc218\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4. <br \/>&nbsp; * select \ud568\uc218\ub098 poll \ud568\uc218\ub97c \uc774\uc6a9\ud558\ub294 \ubc29\ubc95\uc774\ub2e4. \ubb3c\ub860 \ud30c\uc77c \uae30\uc220\uc790\ub294 NULL \uc774\ub2e4. <br \/>&nbsp; &nbsp; \uc774\uc5d0 \ub300\ud55c \uc2e4\uc81c \uc608\uc81c\ub294 comp.unix\uc5d0 \ucc3e\uc544\ubcf4\uba74 \uad6c\ud560 \uc218 \uc788\uc744 \uac83\uc774\ub2e4.<br \/>&nbsp; * \uc2dc\uc2a4\ud15c\uc774 itimers \ub97c \uac00\uc9c0\uace0 \uc788\ub2e4\uba74 (\ub300\ubd80\ubd84 \uc788\ub2e4) \uc774\ub97c \uc774\uc6a9\ud574 usleep\ub97c \uc7ac\uad6c\uc131\ud558\uc5ec<br \/>&nbsp; &nbsp; \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4. <br \/>&nbsp; * POSIX&nbsp; realtime\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4\uba74, nanosleep \ub3c4 \uc874\uc7ac\ud55c\ub2e4.<\/P>\n<P>BSD\uc758 \uacbd\uc6b0\uc5d0\ub294 usleep \uc640 nanosleep \ub458 \ub2e4 \uc9c0\uc6d0\ub41c\ub2e4. <br \/>\uc704\uc5d0\uc11c select \uc758 \ud568\uc218\uc758 \uacbd\uc6b0\ub294 \uc624\ud788\ub824 usleep \uc774\ub098 itimers\ub97c \uc774\uc6a9\ud558\ub294 \uac83\ubcf4\ub2e4 \uc815\ubc00\ud55c <br \/>\uc81c\uc5b4\uac00 \uac00\ub2a5\ud558\ub2e4. <br \/>\ud558\uc9c0\ub9cc \uc7ac\uc6b0\uace0 \uc788\uc744 \ub54c \uc2dc\uadf8\ub110\uc774 \uac78\ub824 \ubc84\ub9ac\uba74 \uc608\uc0c1\uce58 \ubabb\ud55c \ud589\ub3d9\uc744 \ud560 \uc218 \uc788\uc5b4\uc11c \uc8fc\uc758\uac00 <br \/>\uc694\uad6c\ub41c\ub2e4. <br \/>\uc704\uc758 \ubaa8\ub4e0 \uacbd\uc6b0\ub294 \ub610\ud55c, \uc0ac\uc6a9\ud558\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \uc758\uc874\uc801\uc774\ub2e4. \uc989, \uc6b0\ub9ac\uac00 \uc694\uad6c\ud558\ub294 \uac12\uc740 \ub2e8\uc9c0 <br \/>\ucd5c\uc18c\uac12\uc77c \ubfd0\uc774\uba70, \uc2dc\uc2a4\ud15c\uc5d0 \ub530\ub77c\uc11c \uc2e4\uc81c \ud589\ub3d9\uc740 \uc57d\uac04\uc529 \uc9c0\uc5f0\ub420 \uc218\ub3c4 \uc788\ub2e4. <\/P>\n<P><br \/>1.4 How can I get a finer-grained version of alarm() ?<\/P>\n<P>\ub300\ubd80\ubd84\uc758 \uc720\ub2c9\uc2a4 \uc2dc\uc2a4\ud15c\ub4e4\uc740 alarm\uc744 \uad6c\ud604\ud560 \uacbd\uc6b0\uc5d0 , alarm()\ubcf4\ub2e4\ub294 settimer()\ub97c \uc0ac\uc6a9\ud55c\ub2e4. <br \/>\uc65c\ub0d0\ud558\uba74 \uc880 \ub354 \uc12c\uc138\ud55c \uc870\uc815\uc774 \uac00\ub2a5\ud558\uae30 \ub54c\ubb38\uc774\ub2e4. \ubcf4\ud1b5\uc740 alarm()\uacfc settimer(ITMER_REAL)\uc740<br \/>\uae30\ubcf8\uc801\uc778 \ud0c0\uc774\uba38\ub85c \uac04\uc8fc\ud558\uba70, \uc591\ucabd\uc744 \ubaa8\ub450 \ud638\ucd9c\ud558\ub294 \uac83\uc740 \ud63c\ub780\uc744 \ubd80\ub97c \uc218 \uc788\ub2e4. <\/P>\n<P>Itimers \uc740 \ub2e8\ubc88 \ub610\ub294 \uc8fc\uae30\uc801\uc778 \uc2dc\uadf8\ub110\uc744 \uad6c\ud604\ud560 \ub54c \uc0ac\uc6a9\ub41c\ub2e4.<\/P>\n<P>&nbsp; ITIMER_REAL <br \/>&nbsp; &nbsp; - \uc2e4\uc81c \uc2dc\uac04( \ubcbd\uc2dc\uacc4 \uc2dc\uac04 )\uc744 \uc7ac\uba70, SIGALRM \uc2dc\uadf8\ub110\uc744 \ud638\ucd9c\ud55c\ub2e4<br \/>&nbsp; ITIMER_VIRTUAL <br \/>&nbsp; &nbsp; - \ud504\ub85c\uc138\uc2a4 \uac00\uc0c1 \uc2dc\uac04 (CPU \uc2dc\uac04) \uc744 \uc7ac\uba70, SIGVTALRM \uc2dc\uadf8\ub110\uc744 \ud638\ucd9c\ud55c\ub2e4<br \/>&nbsp; ITIMER_PROF<br \/>&nbsp; &nbsp; - \uc0ac\uc6a9\uc790\/ \uc2dc\uc2a4\ud15c CPU \uc2dc\uac04\uc744 \uc7b0\ub2e4. SIGPROF \uc2dc\uadf8\ub110\uc744 \ud638\ucd9c\ud55c\ub2e4. \uc8fc\ub85c polling \ubc29\uc2dd\uc744 <br \/>&nbsp; &nbsp; &nbsp; \uc0ac\uc6a9\ud560 \ub54c \uc2dc\uac04\uc744 \uc7ac\uc8fc\ub294 \uc6a9\ub3c4\ub85c \uc0ac\uc6a9\ub41c\ub2e4. <\/P>\n<P>Itimers\ub294 4.2BSD \uc774\ud6c4\uc5d0 \uacc4\uc18d \uc788\uc5b4\uc628 \uac83\uc774\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc758 \uc2dc\uc2a4\ud15c\uc5d0 \ud45c\uc900\uc73c\ub85c \ucc44\ud0dd\ub41c \uac83\uc740<br \/>\uc544\ub2c8\ub2e4.<\/P>\n<P><br \/>1.5 How can a parent and child process communicate ?<\/P>\n<P>\ubd80\ubaa8\uc640 \uc790\uc2dd\uc740 IPC (Inter Process Communication)\uc744 \uc774\uc6a9\ud55c\ub2e4. ( \ud30c\uc774\ud504, \uc18c\ucf13, \uba54\uc2dc\uc9c0 \ud050,<br \/>\uc138\ub9c8\ud3ec\uc5b4 \u2026) \ub4f1\uc774 \uc788\ub2e4.<br \/>\uac00\uc7a5 \ud655\uc2e4\ud55c \ubc29\ubc95 \uc911\uc758 \ud558\ub098\uac00 \uc790\uc2dd\uc758 exit \uc0c1\ud0dc\ub97c \uac00\uc838\uc624\ub294 \uac83\uc774\ub2e4.<br \/>\uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 \ubd80\ubaa8\ub85c\ubd80\ud130 \ud30c\uc77c \uae30\uc220\uc790\ub97c \ubb3c\ub824 \ubc1b\ub294\ub2e4. \ubd80\ubaa8\ub294 \ud30c\uc774\ud504\uc758 \uc591\ucabd\uc744 \ubaa8\ub450 \uc5f4<br \/>\uc218 \uc788\uc73c\uba70, fork\ub97c \ud558\uace0,&nbsp; \ubd80\ubaa8\ub294 \ud30c\uc774\ud504\uc758 \ud55c\ucabd\uc744 \ub2eb\uace0, \uc790\uc2dd\uc740 \ub2e4\ub978 \ud55c\ucabd\uc744 \ub2eb\ub294\ub2e4.&nbsp; \uc989,<br \/>popen() \ud568\uc218\ub85c \ubc18\ud658 \ubc1b\uc740 \ud30c\uc77c \uae30\uc220\uc790\uc5d0 \uc4f8 \uc218 \uc788\uac8c \ub41c\ub2e4.&nbsp; \ud55c \ud3b8 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 \uc774\uac83\uc744<br \/>\ud45c\uc900 \uc785\ub825\uc73c\ub85c \ubcf4\uac8c \ub41c\ub2e4. \ub610\ud55c \ubc18\ub300\uc758 \uacbd\uc6b0\ub3c4 \uac00\ub2a5\ud558\ub2e4.<\/P>\n<P><br \/>1.6 How do I get ird of zombie process ?<\/P>\n<P>1.6.1 What is a zombie ?<\/P>\n<P>\ud504\ub85c\uadf8\ub7a8\uc774 fork\ub97c \ud558\uace0, \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\ubcf4\ub2e4 \uba3c\uc800 \uc8fd\uac8c \ub420 \ub54c, \ucee4\ub110\uc740 \ubd80\ubaa8<br \/>\ud504\ub85c\uc138\uc2a4\uac00 \ud639\uc2dc \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uc758 \uc815\ubcf4\uac00 \ud544\uc694\ud560 \uc9c0 \ubaa8\ub974\uae30 \ub54c\ubb38\uc5d0 \uc815\ubcf4\ub97c \uac00\uc9c0\uace0 \uc788\uac8c \ub41c\ub2e4. <br \/>\uc608\ub97c \ub4e4\uc5b4 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uc758 exit \uc0c1\ud0dc\ub97c \uccb4\ud06c\ud558\ub294 \uacbd\uc6b0\uac00 \uadf8\ub807\ub2e4. \uc774 \uc815\ubcf4\ub97c<br \/>\uc5bb\uae30 \uc704\ud574 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\ub294 wait() \ud568\uc218\ub97c \ud638\ucd9c\ud558\uba70, \uc774 \ub54c \ucee4\ub110\uc740 \uac00\uc9c0\uace0 \uc788\ub358 \uc815\ubcf4\ub97c \ubc84\ub9ac\uac8c<br \/>\ub41c\ub2e4.<br \/>\uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc885\ub8cc\ub420 \ub54c\uc640 wait \ud568\uc218\uac00 \ud638\ucd9c\ub420 \ub54c\uc758 \uc0ac\uc774\uc758 \uc2dc\uac04\uc5d0 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 \uc880\ube44<br \/>\ud504\ub85c\uc138\uc2a4\ub77c\uace0 \ud55c\ub2e4. \ube44\ub85d \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \ub3cc\uace0 \uc788\uc9c0\ub294 \uc54a\uc9c0\ub9cc, \ud504\ub85c\uc138\uc2a4 \ud14c\uc774\ube14\uc758 \ud55c \uad6c\uc11d\uc744<br \/>\ucc28\uc9c0\ud558\uace0 \uc788\ub294 \uc0c1\ud0dc\uc778 \uac83\uc774\ub2e4. \uc774 \ub54c \uc178\uc5d0\uc11c ps \ub97c \uccd0\ubcf4\uba74 Z \ub85c STAT\uc5d0 \ucc0d\ud600 \uc788\ub294 \uac83\uc744 \ubcfc \uc218<br \/>\uc788\ub2e4. )&nbsp; \uc2e4\uc81c\ub85c \uc880\ube44 \ud504\ub85c\uc138\uc2a4\uac00 \ub9ac\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uc9c0\ub294 \uc54a\ub294\ub2e4. \ud558\uc9c0\ub9cc \uc6b0\ub9ac\uac00 \uc2e0\uacbd\uc4f0\uac8c<br \/>\ub418\ub294 \uc774\uc720\uac00 \ud504\ub85c\uc138\uc2a4 \ud14c\uc774\ube14\uc744 \ucc28\uc9c0\ud558\ub294 \uac83 \ub54c\ubb38\uc5d0 \ubc1c\uc0dd\ud558\ub294 \ubcf4\uac70\uc2a4 \uc218\uce58 \ub54c\ubb38\uc774\ub2e4. <br \/>\uc774\uac83\uc774 \ub354 \uc9c4\ud589\ub418\uba74 \uc88b\uc744 \uac83\uc774 \uc5c6\ub2e4. \uc65c\ub0d0\ud558\uba74 \ud504\ub85c\uc138\uc2a4 \ud14c\uc774\ube14\uc740 \ud55c\uc815\ub41c \uc218\uc758 \uc5d4\ud2b8\ub9ac\ub97c <br \/>\uac16\uace0 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc880\ube44 \ud504\ub85c\uc138\uc2a4\uac00 \uacc4\uc18d \ub298\uc5b4\ub098\uac8c \ub41c\ub2e4\uba74, \uc2e4\uc81c \ub3cc\ub824\uc57c \ud560 \ud504\ub85c\uc138\uc2a4\ub97c<br \/>\uc704\ud55c \uacf5\uac04\uc744 \ud560\ub2f9 \ud560 \uc218 \uc5c6\uac8c \ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c fork \uac00 \uc2e4\ud328\ud560 \ub54c\ub294 \ud56d\uc0c1 \ud504\ub85c\uc138\uc2a4 \uc0c1\ud0dc\ub97c<br \/>\uccb4\ud06c\ud558\ub294 \uc2b5\uad00\uc774 \ud544\uc694\ud558\ub2e4.<br \/>\ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 wait\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\uace0 \uc8fd\uc5b4\ubc84\ub9ac\uba74, \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub294 init \ud504\ub85c\uc138\uc2a4\uc5d0 \uc885\uc18d<br \/>\ub41c\ub2e4. \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\ub97c \uc81c\uac70\ud574 \uc8fc\ub294 \ub370 \ud544\uc694\ud55c \uc791\uc5c5\ub4e4\uc744 \ub300\uc2e0 \ud574\uc8fc\uac8c \ub41c\ub2e4.<\/P>\n<P>1.6.2 How do I prevent them from occurring ?<\/P>\n<P>\uc5b4\ub5bb\uac8c \ud558\uba74 \uc880\ube44 \ud504\ub85c\uc138\uc2a4\ub97c \ub9c9\uc744 \uc218 \uc788\uc744\uae4c? \ud574\uacb0\ucc45\uc740 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uc744 \ub54c\ub9c8\ub2e4 <br \/>wait \/ wait3 \/ waitpid\uc744 \ud638\ucd9c\ud558\uac70\ub098 , \uc2dc\uc2a4\ud15c\uc774 \uc751\uc6a9 \ud504\ub85c\uadf8\ub7a8\uc758 \uc790\uc2dd\ub4e4\uc774 \uc8fd\ub294 \uac83\uc5d0<br \/>\ubb34\uad00\uc2ec\ud558\ub3c4\ub85d \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc774 \uc788\ub2e4. <br \/>\ub610 \ud55c\uac00\uc9c0 \ubc29\ubc95\uc740 fork() \ub97c 2\ubc88 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub2e4.&nbsp; \uadf8\ub798\uc11c \uc911\uac04 \ub2e8\uacc4\uc758 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00<br \/>\ubc14\ub85c \uc885\ub8cc\ub418\ub3c4\ub85d \ub9cc\ub4dc\ub294 \uac83\uc774\ub2e4. \uc774 \ubc29\ubc95\uc744 \uc774\uc6a9\ud558\uba74, \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \uba3c\uc800 \uc8fd\uc5b4 \ubc84\ub9ac\ub294<br \/>\uc0c1\ud669\uc774\ubbc0\ub85c \uc790\uc2dd\uc740 init \ud504\ub85c\uc138\uc2a4\uac00 \uc54c\uc544\uc11c \ucc98\ub9ac\ud558\ub3c4\ub85d \ub9cc\ub4e4 \uc218 \uc788\ub2e4. \uc774\ub97c \uad6c\ud604\ud55c \uac83\uc740 <br \/>\uc608\uc81c \ud504\ub85c\uadf8\ub7a8 fork2 () \uc774\ub2e4.<br \/>\uc790\uc2dd\uc758 exit \uc0c1\ud0dc\ub97c \ubb34\uc2dc\ud558\ub294 \ubc29\ubc95\uc73c\ub85c\ub294 \uc2dc\uadf8\ub110 \ud578\ub4e4\ub9c1\uc744 \uc774\uc6a9\ud558\ub294 \uac83\uc774\ub2e4. <\/P>\n<P>&nbsp;struct sigaction sa;<br \/>&nbsp;sa.sa_handler = SIG_IGN;<br \/>#ifdef SA_NOCLDWAIT<br \/>&nbsp;sa.sa_flags = SA_NOCLDWAIT;<br \/>#else<br \/>&nbsp;sa.sa_flags = 0;<br \/>#endif<br \/>&nbsp;sigemptyset( &amp;sa.sa_mask );<br \/>&nbsp;sigaction( SIGCHLD, &amp;sa, NULL);<\/P>\n<P>\uc704\uc758 \ucf54\ub529\uc774 \uc131\uacf5\uc801\uc774\ub77c\uba74, wait \ud568\uc218\uac00 \uc791\ub3d9\ud558\uc9c0 \uc54a\uc744 \uac83\uc774\ub2e4. <br \/>\ub9cc\uc77c \uc791\ub3d9\ud558\uae30 \uc2dc\uc791\ud55c\ub2e4\uba74, \ubaa8\ub4e0 \uc790\uc2dd \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uc744 \ub54c\uae4c\uc9c0&nbsp; \uae30\ub2e4\ub9b4 \uac83\uc774\uba70, \ub2e4 \uc8fd\uac8c <br \/>\ub418\ub294 \uacbd\uc6b0 errno = ECHILD\ub97c \ubc18\ud658\ud55c\ub2e4. <br \/>\ub610 \ub2e4\ub978 \ubc29\ubc95\uc740 SIGCHLD \uc2dc\uadf8\ub110\uc744 \uc7a1\uc544\uc11c waitpid \ub97c \ud638\ucd9c\ud558\ub294 \ubc29\ubc95\uc774 \uc788\ub2e4.&nbsp; \uc774 \ubc29\ubc95\uc774 <br \/>\ud45c\uc900\uc801\uc73c\ub85c \ub9ce\uc774 \uc0ac\uc6a9\ud558\ub294 \ubc29\uc2dd \uc911 \ud558\ub098\uc774\ub2e4.<\/P>\n<P><br \/>1.7 How do I get my program act like a daemon ?<\/P>\n<P>daemon \ud504\ub85c\uc138\uc2a4\ub294 \ud130\ubbf8\ub110 \uc138\uc158\uc5d0 \uc18d\ud558\uc9c0 \uc54a\uace0 \ubc30\uacbd\uc73c\ub85c \ub3cc\uace0 \uc788\ub294 \ud504\ub85c\uc138\uc2a4\ub85c \uc815\uc758 \ub420 \uc218<br \/>\uc788\ub2e4. \ub9ce\uc740 \uc2dc\uc2a4\ud15c \uc11c\ube44\uc2a4\ub4e4\uc740 \ub370\ubaac\uc73c\ub85c \ub3cc\uace0 \uc788\ub2e4. \uc608\ub97c \ub4e4\uc5b4 \ub124\ud2b8\uc6cd \uc11c\ube44\uc2a4 \ub098 \ud504\ub9b0\ud305 <br \/>\ub4f1\uc740 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub85c \ub3cc\uac8c \ub41c\ub2e4.<br \/>\ub2e8\uc21c\ud788 \ud504\ub85c\uadf8\ub7a8\uc744 \ubc31\uadf8\ub77c\uc6b4\ub4dc\ub85c \ubd80\ub974\ub294 \uac83\uc73c\ub85c\ub294 \uc7a5\uc2dc\uac04 \ub3cc\uc544\uc57c \ud558\ub294 \uac83\uc73c\ub85c\ub294 \ubd80\uc801\ud569\ud558\uba70,<br \/>\ud130\ubbf8\ub110\uc5d0\uc11c \ub5bc\uc5b4\ub0b4\ub294 \uac83\uc774 \uc694\uad6c\ub41c\ub2e4. \ud0a4\ubcf4\ub4dc\uc758 \uc798\ubabb\ub41c \uc785\ub825\uc73c\ub85c \ud574\ubc29\ub418\uae30 \uc704\ud574\uc11c\uc774\ub2e4. <br \/>\ub300\ubd80\ubd84\uc758 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uc21c\uc11c\uac00 \uc788\ub294\ub370, \ub2e4\uc74c\uacfc \uac19\ub2e4<\/P>\n<P>&nbsp;1. fork() \ub97c \ud638\ucd9c\ud558\uc5ec \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \ube60\uc838 \ub098\uac08 \uc218 \uc788\ub3c4\ub85d \ud55c\ub2e4. \uc774\uac83\uc740 \uba85\ub839\ud589\uc5d0\uac8c <br \/>&nbsp;&nbsp; \uc81c\uc5b4\uad8c\uc744 \ub118\uaca8\uc8fc\uac70\ub098 \uc178\uc5d0\uc11c \ud638\ucd9c\ud560 \uc218 \uc788\ub3c4\ub85d \ub9cc\ub4e4\uc5b4 \uc900\ub2e4. \uc774 \uacfc\uc815\uc740 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\uac00<br \/>&nbsp;&nbsp; \uc791\uc5c5 \uadf8\ub8f9\uc758 \ub9ac\ub354\uac00 \ub418\uc9c0 \uc54a\ub3c4\ub85d \ubcf4\uc7a5\ud574 \uc8fc\ub294 \uc5ed\ud560\uc744 \ud55c\ub2e4. \uc774\ub807\uac8c \ud558\ub294 \uc774\uc720\ub294 \ub2e4\uc74c \uacfc\uc815<br \/>&nbsp;&nbsp; \uacfc\uc815\uc5d0\uc11c setsid()\ub97c \ud638\ucd9c\uc774 \uac00\ub2a5\ud558\ub3c4\ub85d \ud558\uae30 \uc704\ud574\uc11c\uc774\ub2e4.<\/P>\n<P>&nbsp;2. setsid() \ub97c \ud638\ucd9c\ud558\uc5ec \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc744 \ub9cc\ub4e4\uace0 \uc138\uc158\uc758 \ub9ac\ub354\uac00 \ub41c\ub2e4. \uc81c\uc5b4 \ud130\ubbf8\ub110\uc740<br \/>&nbsp;&nbsp; \uc138\uc158\uacfc \uc5f0\uad00\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0,\ud130\ubbf8\ub110\uc5d0 \ud504\ub85c\uadf8\ub7a8\uc744 \uc2e4\ud589\uc2dc\ud0a8 \ud130\ubbf8\ub110\uc758 \uc81c\uc5b4\uc5d0\uc11c \uc790\uc720\ub86d\uae30<br \/>&nbsp;&nbsp; \uc704\ud574\uc11c\ub294 \uc0c8\ub85c\uc6b4 \uc138\uc158\uc744 \ub9cc\ub4e4\uc5b4 \ub3c5\ub9bd\ud574\uc57c \ud55c\ub2e4.<\/P>\n<P>&nbsp;3. fork() \ub97c \ub2e4\uc2dc \ud638\ucd9c\ud55c\ub2e4. \uadf8\ub9ac\uace0 \ub2e4\uc2dc \ube60\uc838 \ub098\uac04\ub2e4. \uc774\ub807\uac8c \ud558\ub294 \uc774\uc720\ub294 \uc644\uc804\ud788 \ud130\ubbf8<br \/>&nbsp;&nbsp; \ub110\uc5d0\uc11c \ub3c5\ub9bd\uc801\uc774\uae30 \uc704\ud574\uc11c\uc774\ub2e4. \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4\ub294 \uc138\uc158\uc774 \uc544\ub2cc \uadf8\ub8f9\uc758 \ub9ac\ub354\uac00 \ub418\uba70,<br \/>&nbsp;&nbsp; \uc790\uae30\ub9cc\uc758 \uacf5\uac04\uc744 \uac00\uc9c0\uace0 \ud65c\ub3d9\uc744 \ud560 \uc218 \uc788\uac8c \ub418\ub294 \uac83\uc774\ub2e4. <\/P>\n<P>&nbsp;4. chdir (\"\/\" )\ub97c \ud558\uc5ec, \ud504\ub85c\uadf8\ub7a8\uc774 \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ub9cc\ub4e4\uc9c0 \uc54a\ub294\ub2e4. \uc774\uac83\uc774<br \/>&nbsp;&nbsp; \uc2e4\ud328\ud558\uac8c \ub41c\ub2e4\uba74, \uad00\ub9ac\uc790\uac00 \ud30c\uc77c \uc2dc\uc2a4\ud15c\uc744 \ud574\uc81c(unmount) \uc2dc\ud0ac \uc218 \uc5c6\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub2e4.<br \/>&nbsp;&nbsp; \uc65c\ub0d0\ud558\uba74, \uadf8 \ub514\ub809\ud1a0\ub9ac\uac00 \uc774 \ud504\ub85c\uc138\uc2a4\uc5d0 \uc758\ud574 \uc0ac\uc6a9\uc911\uc774\uae30 \ub54c\ubb38\uc774\ub2e4. \ud55c \ud3b8\uc73c\ub85c\ub294 \ub370\ubaac<br \/>&nbsp;&nbsp; \uc5d0\uac8c \uc911\uc694\ud55c \ub514\ub809\ud1a0\ub9ac\ub85c \uc774\ub3d9\ud558\uc5ec \uc548\uc804\uc131\uc744 \ub3c4\ubaa8\ud560 \uc218\ub3c4 \uc788\uaca0\ub2e4.<\/P>\n<P>&nbsp;5. umask(0) \ub97c \ud558\uc5ec \uc644\ubcbd\ud55c \uc81c\uc5b4\uad8c\uc744 \uc5bb\ub3c4\ub85d \ud560 \uc218 \uc788\ub2e4. \uc774\uac83\uc740 \uc120\ud0dd\uc801\uc778 \uc0ac\ud56d\uc73c\ub85c \uc774\ud574<br \/>&nbsp;&nbsp; \ud558\ub77c.<\/P>\n<P>&nbsp;6. close() fds 0,1,2\u2026 \uc989 \ubd80\ubaa8\ub85c\ubd80\ud130 \uc0c1\uc18d\ubc1b\uc740 \ud45c\uc900 \uc785,\ucd9c\ub825,\uc5d0\ub7ec\uc758 \ud30c\uc77c \uae30\uc220\uc790\ub97c \ub2eb\ub294\ub2e4. <br \/>&nbsp;&nbsp; \uc6b0\ub9ac\ub294 \uc774\ub7f0 \uae30\uc220\uc790\ub4e4\uc774 \uc5b4\ub514\ub85d redirect\ub420 \uc9c0 \ubaa8\ub978\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \ub2eb\uc544 \uc8fc\ub294 \uac83\uc774 \uc88b\uc744<br \/>&nbsp; \uac83\uc774\ub2e4. <br \/>&nbsp;&nbsp; \ub300\ubd80\ubd84\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c sysconf \ub85c SC_OPEN_MAX\ub97c \uc5bb\uc744 \uc218 \uc788\ub2e4. \uc989 \uc0ac\uc6a9\uc790\uac00 \uc5f4 \uc218 \uc788\ub294<br \/>&nbsp;&nbsp; \ud30c\uc77c \uae30\uc220\uc790\uc758 \uac1c\uc218\uc774\ub2e4. \ub9cc\uc57d\uc758 \uacbd\uc6b0 \uc5b4\ub5a4 \ud30c\uc77c \uae30\uc220\uc790\uac00 \uc5f4\ub824 \uc788\uac8c \ub41c\ub2e4\uba74, \ub3d9\uc2dc\uc801\uc73c\ub85c<br \/>&nbsp;&nbsp; \uc7ac\uc0ac\uc6a9\uc744 \ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 <br \/>&nbsp;&nbsp; \ucd5c\ub300 \uac12\uae4c\uc9c0 \ub8e8\ud504\ub97c \uc774\uc6a9\ud558\uc5ec \ub2eb\uc544\uc8fc\ub294 \uac83\uc774 \uc88b\uaca0\ub2e4. <\/P>\n<P>&nbsp;7. \uc774\uc81c \uc0c8\ub85c\uc6b4 \ud45c\uc900 \uc785,\ucd9c\ub825,\uc5d0\ub7ec\uc758 \ud30c\uc77c \uae30\uc220\uc790\ub97c \uc5f0\ub2e4. \uc774 \ubd80\ubd84\uc740 \ud504\ub85c\uadf8\ub798\uba38\uc5d0 \ub530\ub77c<br \/>&nbsp;&nbsp; \ucde8\ud5a5\uc5d0 \ub9de\uac8c \ubc14\uafc0 \uc218 \uc788\ub294 \ubd80\ubd84\uc774\ub2e4. \ub370\ubaac\uc758 \ud2b9\uc131\uc5d0 \ub530\ub77c \ud45c\uc900 \uc785\ub825\uc744 \/dev\/console ,<br \/>&nbsp;&nbsp; \/dev\/null \ub4f1\uc73c\ub85c \uc5f4\uc5b4 \ub458 \uc218 \uc788\ub2e4. <br \/>&nbsp;&nbsp; \uc704\uc640 \uac19\uc740 \uacfc\uc815\uc744 \ub530\ub77c\uac00\ub294 \ud45c\uc900\uc801\uc778 \ub370\ubaac \ud504\ub85c\uc138\uc2a4\ub97c \ub9cc\ub4dc\ub294 \ubc29\ubc95\uc774\ub2e4. <br \/>&nbsp;&nbsp; \ud558\uc9c0\ub9cc, inetd \uc5d0 \uc758\ud574 \uad00\ub9ac\ub418\ub294 \ub370\ubaac\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc774\uc57c\uae30\uac00 \ub9ce\uc774 \ub2ec\ub77c\uc9c0\uac8c \ub41c\ub2e4. inetd\uac00<br \/>&nbsp;&nbsp; \ubaa8\ub450 \uad00\ub9ac\ub97c \ud574\uc8fc\uae30 \ub54c\ubb38\uc5d0, \uc6b0\ub9ac\uac00 \ucd94\uac00\ud574\uc57c \ud560 \uac83\uc740 \ub2e8\uc9c0 chidir , umask \uc815\ub3c4 \ubfd0\uc774\ub2e4.<\/P>\n<P><br \/>1.8 How can I look at process in the system like ps ?<\/P>\n<P>\ubcf4\ud1b5\uc740 popen (command,\"r\"); \ub85c \ub0b4\uc6a9\uc744 \ucd94\ucd9c\ud558\uc5ec \ud30c\uc2f1\ud558\ub294 \uac83\uc73c\ub85c \ud574\uacb0\ud560 \uc218 \uc788\ub2e4.<br \/>\ud504\ub85c\uc138\uc2a4\uac00 \ud30c\uc77c\ub85c \uc800\uc7a5\ub418\uc5b4 \uc788\ub294\ub370, \uc2dc\uc2a4\ud15c\uc5d0 \ub530\ub77c \uc704\uce58\uac00 \ud2c0\ub824 \uc9c8 \uc218 \uc788\uc73c\ubbc0\ub85c \uc774\ub97c \uace0\ub824<br \/>\ud574\uc57c \ud560 \uac83\uc774\ub2e4.<\/P>\n<P><br \/>1.9 Given a pid , how can I tell if it's a running program ?<\/P>\n<P>kill \uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4.<br \/>\uc774\uac83\uc744 \uc0ac\uc6a9\ud560 \ub54c 4\uac00\uc9c0\uc758 \uac00\ub2a5\uc131\uc774 \uc788\ub2e4.<\/P>\n<P>&nbsp;* kill \uc774 0\ub97c \ubc18\ud658\ud560 \ub54c<br \/>&nbsp;&nbsp; - \uc774\uac83\uc740 \ud504\ub85c\uc138\uc2a4\uac00 \uc8fc\uc5b4\uc9c4 PID\ub97c \uac00\uc9c0\uace0 \ube60\uc838 \ub098\uac14\ub2e4\ub294 \uac83\uc744 \uc758\ubbf8\ud55c\ub2e4. \uc2dc\uc2a4\ud15c\uc740 \ub2f9\uc2e0\uc774<br \/>&nbsp; &nbsp;&nbsp; \uc2dc\uadf8\ub110\uc744 \uadf8\uac83\uc5d0 \ubcf4\ub0bc \uc218 \uc788\ub3c4\ub85d \ud5c8\uac00\ud560 \uac83\uc774\ub2e4. <\/P>\n<P>&nbsp;* kill \uc774 ?1 \ubc18\ud658 , errno = ESRCH<br \/>&nbsp;&nbsp; - PID\ub97c \uac00\uc9c4 \ud504\ub85c\uc138\uc2a4\uac00 \uc5c6\uac70\ub098, \ubcf4\uc548 \ub54c\ubb38\uc5d0 \ud655\uc778\uc744 \uac70\ubd80\ud558\ub294 \uc0c1\ud0dc\uc774\ub2e4.<\/P>\n<P>&nbsp;* kill \uc774 ?1\uc744 \ubc18\ud658 , errno = EPERM<br \/>&nbsp;&nbsp; - \uc2dc\uc2a4\ud15c\uc774 \ud2b9\uc815 \ud504\ub85c\uc138\uc2a4\ub97c \uc8fd\uc774\uc9c0 \ubabb\ud558\uac8c \ud55c\ub2e4. \ud504\ub85c\uc138\uc2a4\uac00 \uc774\ubbf8 \ub098\uac14\uac70\ub098, \ubcf4\uc548\uc774 \uae08\uc9c0<br \/>&nbsp; &nbsp;&nbsp; \ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<\/P>\n<P>&nbsp;* kill&nbsp; -1 \ubc18\ud658 , errno = \ub2e4\ub978 \uac12<br \/>&nbsp;&nbsp; - \ubb54\uac00 \ubb38\uc81c\uac00 \uc788\ub2e4.<\/P>\n<P>\ub300\ubd80\ubd84\uc758 \ud14c\ud06c\ub2c9\uc740 \uc131\uacf5\ud558\uac70\ub098, EPERM\uc744 \uac00\uc9c4 \uc2e4\ud328\ub294 \ud504\ub85c\uc138\uc2a4\uac00 \uc874\uc7ac\ud558\uace0, \ub2e4\ub978 \uc5d0\ub7ec\uac12\uc774<br \/>\ub098\uc628 \uacbd\uc6b0\ub294 \uc544\ub2cc \uacbd\uc6b0\ub85c \uac04\uc8fc\ud55c\ub2e4.<br \/>\ub2e4\ub978 \ubc29\ubc95\ub3c4 \uc788\ub294\ub370, \/proc \ub514\ub809\ud1a0\ub9ac\ub85c \uac00\uc11c \ud574\ub2f9 pid\uac00 \uc788\ub294\uc9c0 \uccb4\ud06c\ud558\ub294 \uac83\uc774\ub2e4.<\/P>\n<P><br \/>1.10 What's the return value of system\/pclose\/waitpid ?<\/P>\n<P>man \ud398\uc774\uc9c0\ub97c \uc774\uc6a9\ud558\ub77c.<br \/>\ub2e8\uc9c0 waitpid\uc758 \uacbd\uc6b0\ub294 \uc0c1\uc704 16bit\uac00 \ubc18\ud658\ub418\ub294\ub370 \uc2e0\ub8b0\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0, \ub300\uc2e0 \ub2e4\uc74c\uacfc \uac19\uc740<br \/>\ub9e4\ud06c\ub85c\ub97c \uc774\uc6a9\ud55c\ub2e4. &lt;sys\/wait.h&gt;\uc5d0 \uc815\uc758\ub418\uc5b4 \uc788\ub2e4<\/P>\n<P>&nbsp;WIFEXITED(stat)<br \/>&nbsp;WEXITSTATUS(stat)<br \/>&nbsp;WTERMSIG(stat)<br \/>&nbsp;WIFSIGNALED(stat)<br \/>&nbsp;WIFSTOPPED(stat)<br \/>&nbsp;WSTOPSIG(stat)<br \/>&nbsp;WIFCONTINUED(stat)<br \/>&nbsp;WCOREDUMP(stat)<\/P>\n<P><br \/>1.11 How do I find out about a process's memory usage ?<\/P>\n<P>getrusage() \ub97c \uc0b4\ud3b4\ubcf4\ub77c..<\/P>\n<P><br \/>1.12 Why do processes never decrease in size?<\/P>\n<P>free()\ub85c \uba54\ubaa8\ub9ac\ub97c \ud799\uc73c\ub85c \ub418\ub3cc\ub9b4 \ub54c, \ud504\ub85c\uadf8\ub7a8\uc758 \uba54\ubaa8\ub9ac \uc0ac\uc6a9\uc744 \uc904\uc774\uc9c0 \uc54a\ub294\ub2e4. \uba54\ubaa8\ub9ac <br \/>\ud574\uc81c\ub3c4 \ud504\ub85c\uc138\uc2a4\uc758 \uc8fc\uc18c \uacf5\uac04\uc5d0 \ud560\ub2f9\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc774\ub294 \ubbf8\ub798\uc5d0 \uc788\uc744\uc9c0 \ubaa8\ub974\ub294 <br \/>malloc()\uc744 \ucda9\uc871\uc2dc\ud0a4\uae30 \uc704\ud574\uc11c\uc774\ub2e4.<br \/>\ub9cc\uc77c \uc2dc\uc2a4\ud15c\uc5d0 \uba54\ubaa8\ub9ac\ub97c \ub418\ub3cc\ub9ac\uace0 \uc2f6\uc740 \uacbd\uc6b0\uc5d0\ub294 mmap()\uc744 \uc774\uc6a9\ud558\uc5ec \uac1c\uc778\uc801\uc778 \ub9e4\ud551\uc744 \uc774\uc6a9<br \/>\ud558\uae30 \ubc14\ub780\ub2e4. <br \/>\uc774\uac83\uc758 \ub9e4\ud551\uc744 \uc81c\uac70\ud558\uba74 \uc790\ub3d9\uc801\uc73c\ub85c \uc2dc\uc2a4\ud15c\uc5d0\uac8c \ubc18\ud658\ub41c\ub2e4. GNU C \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uacbd\uc6b0\uc5d0\ub294 <br \/>malloc() \uc774 \uc774\uac83\uc744 \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc5d0 \uc790\ub3d9\uc801\uc73c\ub85c \uc704\uc758 \uacfc\uc815\uc774 \uc774\ub8e8\uc5b4\uc9c4\ub2e4. <br \/>\ubb3c\ub860 ,\uc5ec\ub7ec\ubd84\uc758 \ud504\ub85c\uadf8\ub7a8\uc774 \ubc84\uadf8\uac00 \uc788\uc5b4\uc11c \uba54\ubaa8\ub9ac \ub204\uc218\uac00 \uc788\uc744\uc9c0\ub3c4 \ubaa8\ub974\uaca0\ub2e4.<\/P>\n<P><br \/>1.13 How do I change the name of my program?&nbsp; (as seen by 'ps' )<\/P>\n<P>BSD\uc640 \uac19\uc740 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub294 ps \ud504\ub85c\uadf8\ub7a8\uc774 \uc2e4\ud589\ub418\uace0 \uc788\ub294 \ud504\ub85c\uadf8\ub7a8\uc758 \uc8fc\uc18c \uacf5\uac04\uc744 \uc9c1\uc811 \ub4e4\uc5ec\ub2e4<br \/>\ubcf4\uae30 \ub54c\ubb38\uc5d0 \ud604\uc7ac\uc758 argv[]\uc758 \uac12\uc744 \ucc3e\ub294\ub2e4. \uc774\ub7f0 \ubc29\uc2dd \ub54c\ubb38\uc5d0 argv \uac12\uc744 \ubc14\uafb8\uc5b4 \uc8fc\uba74 \ub2f9\uc2e0\uc758<br \/>\ud504\ub85c\uadf8\ub7a8 \uc774\ub984\uc744 \ubc14\uafc0 \uc218 \uc788\ub2e4.<br \/>SysV\uc758 \uacbd\uc6b0\uc5d0\ub294 \uba85\ub839 \uc774\ub984\uacfc \ud30c\ub77c\ubbf8\ud130\uc758 80 \ubc14\uc774\ud2b8 \uc815\ub3c4\uac00 u-area \uc5d0 \uc800\uc7a5\ub41c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c <br \/>\uc9c1\uc811\uc801\uc778 \uc218\uc815\uc744 \uac00\ud560 \uc218\ub294 \uc5c6\ub2e4. \uc5b4\uca4c\uba74 \uc774\ub984\uc744 \ubc14\uafb8\uc5b4 \uc8fc\ub294 \ud568\uc218\uac00 \uc788\uc744\uc9c0\ub3c4 \ubaa8\ub978\ub2e4. <br \/>\uc5c6\ub2e4\uba74, exec()\ub97c \uc774\uc6a9\ud574\uc57c \ud560\uc9c0\ub3c4 \ubaa8\ub974\uace0, \ucee4\ub110 \uba54\ubaa8\ub9ac\uc5d0 \uc9c1\uc811 \uc368\uc57c \ud560\uc9c0\ub3c4 \ubaa8\ub974\uc9c0\ub9cc \uc704\ud5d8<br \/>\ud558\ubbc0\ub85c \ud53c\ud558\ub294 \uac83\uc774 \uc88b\uaca0\ub2e4.<br \/>Solaris\uc640 \uac19\uc740 \uacbd\uc6b0\uc5d0\ub294 \uc704\uc758 2\uac00\uc9c0 \ud0c0\uc785 \ubaa8\ub450 \uc874\uc7ac\ud55c\ub2e4. \uadf8\ub7ec\ubbc0\ub85c BSD\uc640 \uac19\uc740 ps\ub97c \uc774\uc6a9<br \/>\ud574\uc11c \uace0\uccd0\uc8fc\uba74 \ud574\uacb0\ub41c\ub2e4.<br \/>\ub2e4\uc74c\uc758 \ud568\uc218\uac00 \uc9c0\uc6d0\ub418\ub294 \uc9c0 \uc6b0\uc120 \ud655\uc778\ud574 \ubcf4\ub77c.. setproctitle() ? \uc774\ub984\uc744 \ubc14\uafb8\uc5b4 \uc8fc\ub294 \ud568\uc218..<\/P>\n<P><br \/>1.14 Where do I put my configuration file then ?<\/P>\n<P>\uc774 \ubb38\uc81c\ub294 \uc2dc\uc2a4\ud15c \ud658\uacbd\uc5d0 \ub530\ub77c \ub2e4\ub974\ub2e4.<br \/>\/var\/opt\/PACKAGE , \/usr\/local\/lib , \/usr\/local\/etc \ub4f1\uacfc \uac19\uc774 \uc5ec\ub7ec\uac00\uc9c0\uac00 \uc788\uc744 \uc218 \uc788\ub2e4.<br \/>\ub300\ubd80\ubd84\uc758 \ud658\uacbd \ud30c\uc77c\uc740 '.'\uc73c\ub85c \ud30c\uc77c\uba85 \uc55e\uc5d0 \ubd99\uc774\uace0, $HOME \ub514\ub809\ud1a0\ub9ac \uc548\uc5d0 \uc704\uce58\ud558\ub294 \uacbd\uc6b0\uac00 <br \/>\ub9ce\ub2e4.<br \/>\ud328\ud0a4\uc9c0\uc640 \uac19\uc740 \uacbd\uc6b0\uc5d0\ub294 ?prefix \uc640 \uac19\uc740 \uc635\uc158\uc744 \uac00\uc9c0\uace0 \uc704\uce58\ub97c \uacb0\uc815\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\ub2e4. \uc774<br \/>\uacbd\uc6b0\uc5d0\ub294 \uc801\ub2f9\ud788 \ud658\uacbd \ubcc0\uc218\uc5d0 \ub367\ubd99\uc5ec \uc8fc\ub294 \ubc29\ubc95\uc774 \uc788\uc744 \uc218 \uc788\ub2e4. \ud639\uc740 \uc9c1\uc811 config.h \ud30c\uc77c<br \/>\uc5d0\uc11c \uc218\uc815\ud558\ub294 \uac83\ub3c4 \uc788\ub2e4. <br \/>\uc0ac\uc6a9\uc790\uc5d0\uac8c \ud55c\uc815\ub418\ub294 \ud658\uacbd \uc124\uc815 \ud30c\uc77c\uc758 \uacbd\uc6b0\uc5d0\ub294 '\uc810'\uc774 \uc788\ub294 \ud558\ubd80 \ub514\ub809\ud1a0\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\uc11c <br \/>\ubcf4\uad00\ud558\ub294 \uacbd\uc6b0\uac00 \uc77c\ubc18\uc801\uc774\ub2e4. <\/P>\n<P><br \/>1.15 Why doesn't my process get SIGHUP when parent dies ?<\/P>\n<P>\uc774\uac83\uc740 \uc6d0\ub798 \uadf8\ub7ec\ud558\uae30 \ub54c\ubb38\uc774\ub2e4.<br \/>SIGHUP \uc740 \ub9d0\uadf8\ub300\ub85c \ud130\ubbf8\ub110 \uc120\uc774 \ub04a\uc5b4\uc84c\ub2e4\ub294 \uacbd\uc6b0\uc758 \uc2dc\uadf8\ub110\uc774\ub2e4. \uc774\ub294 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uc640 \uc804\ud600<br \/>\ubb34\uad00\ud55c \uac1c\ub150\uc774\ub2e4. \uc774 \uc2dc\uadf8\ub110\uc740 \ubcf4\ud1b5 tty \ud130\ubbf8\ub110\uc5d0\uc11c \uc0dd\uc131\ub41c\ub2e4. <br \/>\ud558\uc9c0\ub9cc \uc138\uc158 \uad00\ub9ac \uc2dc\uc2a4\ud15c\uc758 \uacbd\uc6b0\uc5d0\ub294 \ubd80\ubaa8 \ud504\ub85c\uc138\uc2a4\uac00 \uc8fd\uc744 \ub54c SIGHUP\uc744 \ubc1b\uc744 \uc218\ub3c4 \uc788\ub294\ub370,<\/P>\n<P>&nbsp;* \uc8fd\ub294 \ud504\ub85c\uc138\uc2a4\uac00 \uc138\uc158\uc758 \ub9ac\ub354\uc778 \uacbd\uc6b0\uc774\ub2e4. \ud130\ubbf8\ub110\uacfc \uc5f0\uad00\ub418\uc5b4 \uc788\uae30 \ub54c\ubb38\uc5d0, \ud130\ubbf8\ub110\uc740 <br \/>&nbsp;&nbsp; SIGHUP \uc2dc\uadf8\ub110\uc744 \ud130\ubbf8\ub110 \uadf8\ub8f9\uc758 \ubaa8\ub4e0 \ud504\ub85c\uc138\uc2a4\uc5d0\uac8c \uc804\ub2ec\ud55c\ub2e4.<br \/>&nbsp;* \uc8fd\ub294 \ud504\ub85c\uc138\uc2a4\uac00 \ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc744 \uace0\uc544\ub85c \ub9cc\ub4e4\uc5b4 \ubc84\ub9b4 \uacbd\uc6b0.<\/P>\n<P><br \/>1.16 How can I kill all descendents of a process ?<\/P>\n<P>\uc774\uc5d0 \ub300\ud55c \ucda9\ubd84\ud55c \ubc29\ubc95\uc740 \uc5c6\ub2e4. ps\ub85c \ud655\uc778 \ud558\ub294 \uac83\uc740 \ub2e8\uc9c0 \uadf8 \uc2dc\uac04\uc758 \uc2a4\ub0c5 \uc0f7\uc774\uae30 \ub54c\ubb38\uc5d0<br \/>\uc774\ub97c \uac00\uc9c0\uace0 \ucc98\ub9ac\ud558\ub294 \uac83\uc740 \ud55c\uacc4\uac00 \uc788\uae30 \ub9c8\ub828\uc774\ub2e4.<br \/>\ud558\uc9c0\ub9cc, \ud558\ubd80 \ud504\ub85c\uc138\uc2a4\uac00 \uc5f0\uc18d\uc801\uc73c\ub85c \ub2e4\uc2dc \ud558\ubd80 \ud504\ub85c\uc138\uc2a4\ub97c \ub9cc\ub4dc\ub294 \uacbd\uc6b0\uc5d0\ub294 , \ud55c\ubc88\uc5d0 \uc8fd\ub294<br \/>\uc2dc\ub098\ub9ac\uc624\uac00 \uac00\ub2a5\ud558\ub2e4. \ud558\ubd80 \ud504\ub85c\uc138\uc2a4\uc5d0\uac8c \uc0c8\ub85c\uc6b4 \uadf8\ub8f9\uc73c\ub85c \uac00\ub3c4\ub85d \ub9cc\ub4e4\uace0, \uadf8\ub8f9\uc744 \uc8fd\uc5ec<br \/>\ubc84\ub9ac\uba74 \uac04\ub2e8\ud788 \ud574\uacb0\ub41c\ub2e4.<br \/>\ud504\ub85c\uc138\uc2a4 \uadf8\ub8f9\uc744 \ub9cc\ub4dc\ub294 \uacbd\uc6b0 \uc120\ud638\ub418\ub294 \ubc29\ubc95\uc740 setpgid() \uc774\ub2e4. setpgrp()\ubcf4\ub2e4\ub294 \uc774\uac83\uc744 <br \/>\uc0ac\uc6a9\ud558\ub77c.. <br \/>\uc65c\ub0d0\ud558\uba74, \ud6c4\uc790\uac00 \uc2dc\uc2a4\ud15c\ub9c8\ub2e4 \ud2c0\ub9b4 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<br \/>\uadf8\ub8f9\uad00\ub9ac\uc5d0 \ub300\ud574\uc11c\ub294 \uc608\uc81c \ud504\ub85c\uadf8\ub7a8 (Job-control)\uc744 \ubcf4\uae30 \ubc14\ub780\ub2e4.<br \/><\/FONT><\/P>\n","protected":false},"excerpt":{"rendered":"<p>comp.unix.programmer newsgroup FAQ \ud55c\uae00\ubc88\uc5ed\ud310 Part.1&nbsp; \ubb38\uc11c\uc81c\ubaa9 : 1. Process Control\uc791 \uc131 \uc790 : \uc870\uc131\uc6d0\ud3b8 \uc9d1 \uc790 : \ubc15\ubbfc\uc2dd(SADWIND)\uc791 \uc131 \uc77c : 2001. 05. 16\uc6d0 \ucd9c \ucc98 : http:\/\/www.efefeffang.com\/unix\/faq_toc.html &nbsp; \uc6d0\ubb38 \ucd9c\ucc98\ub294 \uc704\uc5d0 \uba85\uc2dc\ub41c \uac83\uacfc \uac19\uc2b5\ub2c8\ub2e4.1\uc7a5\uc740 \ud504\ub85c\uc138\uc2a4 \uc81c\uc5b4\uc5d0 \uad00\ub828\ub41c \ub0b4\uc6a9\uc785\ub2c8\ub2e4.\uc6d0\ub798 About This FAQ\ub780 \ubb38\uc11c\ubd80\ud130 \uc2dc\uc791\ud558\uc9c0\ub9cc.. \uc77c\ub2e8 \uc5ec\uae30\uc11c\ub294 \ube90\uc2b5\ub2c8\ub2e4 \u3161.\u3161(SADWIND \u66f0, &#8216;\uadf8\uac83\ub450 \ubc88\uc5ed\ud558\ub78f! \u3161.,\u3161) 1.1 \uc0c8\ub85c\uc6b4 \ud504\ub85c\uc138\uc2a4 [&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-55","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\/55","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=55"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/55\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=55"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=55"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=55"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}