¡¡¡¡½ø³ÌµÄ¸ÅÄî
¡¡¡¡Linux²Ù×÷ϵͳÊÇÃæÏò¶àÓû§µÄ.ÔÚͬһʱ¼ä¿ÉÒÔÓÐÐí¶àÓû§Ïò²Ù×÷ϵͳ·¢³ö¸÷ÖÖÃüÁî.ÄÇô²Ù×÷ϵͳÊÇÔõôʵÏÖ¶àÓû§µÄ»·¾³ÄØ?ÔÚÏÖ´úµÄ²Ù×÷ϵͳÀïÃæ,¶¼ÓгÌÐòºÍ½ø³ÌµÄ¸ÅÄî.ÄÇôʲôÊdzÌÐò,ʲôÊǽø³ÌÄØ?ͨË׵Ľ²³ÌÐòÊÇÒ»¸ö°üº¬¿ÉÒÔÖ´ÐдúÂëµÄÎļþ,ÊÇÒ»¸ö¾²Ì¬µÄÎļþ.¶ø½ø³ÌÊÇÒ»¸ö¿ªÊ¼Ö´Ðе«ÊÇ»¹Ã»ÓнáÊøµÄ³ÌÐòµÄʵÀý.¾ÍÊÇ¿ÉÖ´ÐÐÎļþµÄ¾ßÌåʵÏÖ.
¡¡¡¡Ò»¸ö³ÌÐò¿ÉÄÜÓÐÐí¶à½ø³Ì,¶øÿһ¸ö½ø³ÌÓÖ¿ÉÒÔÓÐÐí¶à×Ó½ø³Ì.ÒÀ´ÎÑ»·ÏÂÈ¥,¶ø²úÉú×ÓËï½ø³Ì.µ±³ÌÐò±»ÏµÍ³µ÷Óõ½ÄÚ´æÒÔºó,ϵͳ»á¸ø³ÌÐò·ÖÅäÒ»¶¨µÄ×ÊÔ´(ÄÚ´æ,É豸µÈµÈ)È»ºó½øÐÐһϵÁеĸ´ÔÓ²Ù×÷,ʹ³ÌÐò±ä³É½ø³ÌÒÔ¹©ÏµÍ³µ÷ÓÃ.ÔÚϵͳÀïÃæÖ»Óнø³ÌûÓгÌÐò,ΪÁËÇø·Ö¸÷¸ö²»Í¬µÄ½ø³Ì,ϵͳ¸øÿһ¸ö½ø³Ì·ÖÅäÁËÒ»¸öID(¾ÍÏóÎÒÃǵÄÉí·ÝÖ¤)ÒÔ±ãʶ±ð.
¡¡¡¡ÎªÁ˳ä·ÖµÄÀûÓÃ×ÊÔ´,ϵͳ»¹¶Ô½ø³ÌÇø·ÖÁ˲»Í¬µÄ״̬.½«½ø³Ì·ÖΪн¨,ÔËÐÐ,×èÈû,¾ÍÐ÷ºÍÍê³ÉÎå¸ö״̬.н¨±íʾ½ø³ÌÕýÔÚ±»´´½¨,ÔËÐÐÊǽø³ÌÕýÔÚÔËÐÐ,×èÈûÊǽø³ÌÕýÔڵȴýijһ¸öʼþ·¢Éú,¾ÍÐ÷ÊDZíʾϵͳÕýÔڵȴýCPUÀ´Ö´ÐÐÃüÁî,¶øÍê³É±íʾ½ø³ÌÒѾ½áÊøÁËϵͳÕýÔÚ»ØÊÕ×ÊÔ´.¹ØÓÚ½ø³ÌÎå¸ö״̬µÄÏêϸ½â˵ÎÒÃÇ¿ÉÒÔ¿´¡¶²Ù×÷ϵͳ¡·ÉÏÃæÓÐÏêϸµÄ½â˵¡£
¡¡¡¡2.½ø³ÌµÄ±êÖ¾
¡¡¡¡ÉÏÃæÎÒÃÇÖªµÀÁ˽ø³Ì¶¼ÓÐÒ»¸öID,ÄÇôÎÒÃÇÔõôµÃµ½½ø³ÌµÄIDÄØ?ϵͳµ÷ÓÃgetpid¿ÉÒԵõ½½ø³ÌµÄID,¶øgetppid¿ÉÒԵõ½¸¸½ø³Ì(´´½¨µ÷Óøú¯Êý½ø³ÌµÄ½ø³Ì)µÄID.
¡¡¡¡pid_t getpid(void);
¡¡¡¡pid_t getppid(void);
¡¡¡¡½ø³ÌÊÇΪ³ÌÐò·þÎñµÄ,¶ø³ÌÐòÊÇΪÁËÓû§·þÎñµÄ.ϵͳΪÁËÕÒµ½½ø³ÌµÄÓû§Ãû,»¹Îª½ø³ÌºÍÓû§½¨Á¢ÁªÏµ.Õâ¸öÓû§³ÆΪ½ø³ÌµÄËùÓÐÕß.ÏàÓ¦µÄÿһ¸öÓû§Ò²ÓÐÒ»¸öÓû§ID.ͨ¹ýϵͳµ÷ÓÃgetuid¿ÉÒԵõ½½ø³ÌµÄËùÓÐÕßµÄID.ÓÉÓÚ½ø³ÌÒªÓõ½Ò»Ð©×ÊÔ´,¶øLinux¶Ôϵͳ×ÊÔ´ÊǽøÐб£»¤µÄ,ΪÁË»ñÈ¡Ò»¶¨×ÊÔ´½ø³Ì»¹ÓÐÒ»¸öÓÐЧÓû§ID.Õâ¸öIDºÍϵͳµÄ×ÊԴʹÓÃÓйØ,Éæ¼°µ½½ø³ÌµÄȨÏÞ.ͨ¹ýϵͳµ÷ÓÃgeteuidÎÒÃÇ¿ÉÒԵõ½½ø³ÌµÄÓÐЧÓû§ID.ºÍÓû§IDÏà¶ÔÓ¦½ø³Ì»¹ÓÐÒ»¸ö×éIDºÍÓÐЧ×éIDϵͳµ÷ÓÃgetgidºÍgetegid¿ÉÒÔ·Ö±ðµÃµ½×éIDºÍÓÐЧ×éID.
¡¡¡¡uid_t getuid(void);
¡¡¡¡uid_t geteuid(void);
¡¡¡¡gid_t getgid(void);
¡¡¡¡git_t getegid(void);
¡¡¡¡ÓÐʱºòÎÒÃÇ»¹»á¶ÔÓû§µÄÆäËûÐÅÏ¢¸ÐÐËȤ(µÇ¼ÃûµÈµÈ),Õâ¸öʱºòÎÒÃÇ¿ÉÒÔµ÷ÓÃgetpwuidÀ´µÃµ½¡£
¡¡¡¡struct passwd {
¡¡¡¡char *pw_name; /* µÇ¼Ãû³Æ */
¡¡¡¡char *pw_passwd; /* µÇ¼¿ÚÁî */
¡¡¡¡uid_t pw_uid; /* Óû§ID */
¡¡¡¡gid_t pw_gid; /* Óû§×éID */
¡¡¡¡char *pw_gecos; /* Óû§µÄÕæÃû */
¡¡¡¡char *pw_dir; /* Óû§µÄĿ¼ */
¡¡¡¡char *pw_shell; /* Óû§µÄSHELL */
¡¡¡¡};
haoxiuhai ÓÚ 2010-08-09 09:42:59·¢±í:
ÎÒ²ÁÀÕ£¡£¡