SAS TIP
Go to Documentation Home
HOME
Go to Book List
FUN_home
Go to Table of Contents
¿¬±¸È¸
Go to Index
ÀÚ·á½Ç
Go to Master Index
SAS  9.1.3
Go to Feedback page
MAIL
work
Go to previous page
Previous
Go to next page
Next
óÀ½¸Þ´º·Î

PROCESS ID(PID)°¡ Á×Àº SAS µð·ºÅ丮 »èÁ¦.



¼¼¼ÇÀÌ ³¡³­ SASÀÇ WORK »èÁ¦ ÇÁ·Î±×·¥

´Ù¿î·Îµå : PULIST ÆÄÀÏ

          LOGEVENT ÆÄÀÏ

          WORK û¼Ò ÆÄÀÏ


SAS CODE
¡¡

SAS Statements
****************************************************************;

1. ¾Æ·¡ÀÇ ±ÛÀÌ ¿¹ÀüÀÇ ¹öÁ¯ÀÌ¶ó¼­ Á¦°¡ ¼öÁ¤À» ÇÏ¿©¼­ ¿Ï¼ºÇÏ¿´½À´Ï´Ù.

   Âü°íÇϱ⸦ ¹Ù¶ø´Ï´Ù.

   - http://listserv.uga.edu/cgi-bin/wa?A2=ind9804D&L=sas-l&P=R12035&D=0;

2. cleanwork - UNIX¿¡¼­ SAS ÇÁ·Î¼¼½º°¡ Á¾·áµÚ¿¡ ³²Àº WORK µð·ºÅ丮ÀÇ

               ÆÄÀÏÀ» Áö¿ì±â À§ÇÑ ¿É¼Ç(SASµµ¿ò¸» ÂüÁ¶)

               WORK µð·ºÅ丮 û¼Ò¸¦ ÇÏ´Â µµ±¸.

3. PULIST : ÇöÀç ¿î¿µÁßÀÎ PROCESS ID¸¦ È®ÀÎÇÏ´Â MS¿¡¼­ Á¦°øÇÏ´Â ÇÁ·Î±×·¥

            (Windows NT Resourse KIT)

            À¯»çÇÑ ÇÁ·Î±×·¥ : PsTools

4. LOGEVENT : ÆÄÀÏ »èÁ¦½Ã ¿À·ù¹ß»ý½Ã NT·Î±×¿¡ ·Î±× »ý¼º

              ¼³Á¤-Á¦¾îÆÇ-°ü¸®µµ±¸-À̺¥Æ®ºä¾î-ÀÀ¿ëÇÁ·Î±×·¥·Î±×

              Âü°í»çÀÌÆ® : http://support.microsoft.com/kb/315410

                           http://www.petri.co.il/download_free_reskit_tools.htm

5. »ç¿ë¹æ¹ý : NT ½ºÄÉÁì¿¡¼­ Batch ¸ðµå·Î ÇÁ·Î±×·¥ ½ÇÇà

6. ÁÖÀÇÁ¡ : ÇÁ·Î±×·¥ÀÇ ´Ù¾çÇÑ Å×½ºÆ®¸¦ ÇϽÅÈÄ¿¡, ÁÖÀÇÇÏ½Ã°í »ç¿ëÇϽñ⸦

           ¹Ù¶ø´Ï´Ù. ÇÊ¿äÇÑ WORKÆÄÀÏÀ» Áö¿ï¼öµµ ÀÖ½À´Ï´Ù.

7. Âü°í

FILENAME : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0162.htm

DOPEN    : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0139.htm

DNUM     : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0138.htm

DCLOSE   : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0124.htm

DREAD    : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0142.htm

FDELETE  : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0156.htm

MODULEN : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0275.htm

****************************************************************;

* ±âº» ¼³Á¤;

* NT Resource KitÀÇ À§Ä¡ ÁöÁ¤;

%let ntrk ='"C:\Program Files\Resource Kit\pulist.exe"';

%let LOGEVENT ='"C:\Program Files\Resource Kit\logevent.exe"';

* ±âº»¼³Á¤ Á¾·á;

****************************************************************;

options noxwait xsync obs=max;

* Win32 API È£Ãâ Å×À̺íÀ» À§ÇØ Work catalogue¿¡ Temporary Entry »ý¼º.;

filename sascbtbl catalog 'work.temp.winapi.source';

data _null_;

       file sascbtbl;

       put "routine RemoveDirectoryA";

       put "module=KERNEL32";

       put "minarg=1";

       put "maxarg=1";

       put "stackpop=called";

       put "returns=short;";

       put "arg 1 input char format=$cstr200.;";

run;

¡¡

* Work¶óÀ̺귯¸®µéÀÌ ÀúÀåµÇ´Â µð·ºÅ丮 À§Ä¡¸¦ ã´Â´Ù.;

%let wdir=;

data _null_;

       * Config¸¦ °Ë»öÇÏ¿©¼­ À§Ä¡¸¦ ã´Â ¹æ¹ýµµ ÀÖÁö¸¸, °£´ÜÇÏ°Ô ¾Æ·¡¿Í °°ÀÌ Ã³¸®;

       workdir = substr(pathname("work"),1,index(pathname("work"),'\_TD')-1);

       call symput('wdir',trim(left(workdir)));

run;

¡¡

* SAS TEMPÆÄÀÏ À§Ä¡¸¦ ¹ÝȯÇÑ´Ù.(LOGâ¿¡¼­ È®ÀÎ);

*±âº» WORKÀ§Ä¡ : C:\Documents and Settings\Administrator\Local Settings\Temp\SAS Temporary Files;

%put wdir=&wdir;

* WORK ¼­ºêµð·ºÅ丮ÀÇ À̸§À» µ¥ÀÌÅͼ¼Æ®·Î »ý¼º.

* WORK subdirectory ÇüÅ : _TDxxxx

* (_TD + SAS ¼¼¼ÇÀÇ ÇÁ·Î¼¼½º ID(Process ID,PID) ¹øÈ£ 4ÀÚ¸®);

data sasdirs(index=(workdir));

       attrib dirname length=$50

             workdir length=$8

             pid length=$5;

       * À§¿¡¼­ ÀúÀåµÈ µð·ºÅ丮 À§Ä¡¸¦ FILENAME "mydir"¿¡ ÇÒ´ç;

       rc=filename('mydir',"&wdir");

       * ÇÒ´çµÈ µð·ºÅ丮¸¦ Á¢±ÙÇã°¡;

       did=dopen('mydir');

       * DIRNAMEº¯¼ö ÃʱâÈ­;

       dirname=' ';

       * WORKµð·ºÅ丮 ³»ÀÇ µð·ºÅ丮ÀÇ ¼öÀÚ¸¦ ÇÒ´ç;

       memcount=dnum(did);

       if (memcount>0) then do;

          do t = 1 to memcount;

             * WORK µð·ºÅ丮 ³»¿¡ Á¸ÀçÇÏ´Â µð·ºÅ丮¸íÀ» ÇÒ´ç;

             * ÇöÀç ÇÁ·Î¼¼½º¿¡ Á¸ÀçÇÏ´Â µð·ºÅ丮¸í°ú ¼¼¼ÇÀÌ Á×Àº µð·ºÅ丮¸í ÇÒ´ç;

             dirname=trim(left(upcase(dread(did,t))));

             * WORK µð·ºÅ丮 ³»ÀÇ _TDxxxx¸¸À» ´ë»óÀ¸·Î ½ÇÇà;

             if dirname =: "_TD" then do;

               workdir = trim(dirname);

               pid = substr(dirname,4);

               output;

             end;

          end;

       end;

       rc=dclose(did);

run;

¡¡

* PULISTÀ¯Æ¿¸®Æ¼¸¦ ÀÌ¿ëÇÏ¿© ÇöÀç ½ÇÇàÁßÀÎ SAS ÇÁ·Î¼¼½ºÀÇ ¸®½ºÆ®¸¦ ȹµæÇÑ´Ù.;

* °¢ ÇöÀç ½ÇÇàÁßÀÎ SAS ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ý¼ºµÈ WORKÇÏÀ§µð·ºÅ丮¸íÀ» »ý¼º;

* ÆÄÀÌÇÁ Âü°í : D:\Dµå¶óÀ̺ê\baek\00.ȨÆäÀÌÁö°ü¸®\SAS\1.FUNCTION\F0175.htm;

filename pulist pipe &ntrk;

data sasprocs(keep=pid workdir index=(workdir));

       attrib process length=$18

             workdir length=$8

             rawpid length=$5

             pid length=$5;

       * ÆÄÀÌÆ® ±â´ÉÀ» ÀÌ¿ëÇÏ¿© PULIST¿¡ ÀÇÇØ »ý¼ºµÈ ÇÁ·Î¼¼½º ¸®½ºÆ® ÀÌ¿ëÇÑ´Ù.;

       infile pulist lrecl=100 pad;

       input process rawpid;

       process = trim(left(upcase(process)));

       * ÇöÀç ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½ºÁß¿¡¼­ SAS ÇÁ·Î¼¼½º¸¸ ¼±ÅÃ;

       if process =: 'SAS.' and pid ne 'PID' then do;

          * ÇöÀç ½ÇÇàÁßÀÎ SASÀÇ WORK ÇÏÀ§µð·ºÅ丮 ¸í°ú PID¸¦ ȹµæ;

          pid = put(input(rawpid,4.),z4.);

          workdir = trim("_TD" || trim(pid));

          output;

       end;

run;

filename pulist;

¡¡

* ÇöÀç ½ÇÇàÁßÀÎ SASÇÁ·Î¼¼½º¿Í °ü°è ¾ø´Â WORK ÇϺεð·ºÅ丮 ³»ÀÇ ÆÄÀÏÀ» »èÁ¦Çϰí,

   WORK ÇϺεð·ºÅ丮¸¦ »èÁ¦ÇÑ´Ù.

   ¸¸¾à ÇϺεð·ºÅ丮¸¦ »èÁ¦ÇÏÁö ¸øÇϸé, À̺¥Æ®·Î±×¿¡ ¿¡·¯¸¦ ÀÛ¼ºÇÑ´Ù.;

* ÇϺεð·ºÅ丮 ³»ÀÇ µð·ºÅ丮¸í(SASDIRS)¿Í

   ÇöÀç ½ÇÇàÁßÀÎ SASÇÁ·Î¼¼½ºÀÇ µð·ºÅ丮¸í(SASPROCS)¸¦ MERGE;

data _NULL_;

 merge sasdirs(in=a) sasprocs(in=b);

       by workdir;

       if a and not b then do;

          * WORK ÇϺεð·ºÅ丮³»ÀÇ µð·ºÅ丮¸íÀ» ÇÒ´ç;

          rc = filename('subdir',"&wdir.\" || trim(workdir));

          * WORK ÇϺεð·ºÅ丮³»ÀÇ °¢ µð·ºÅ丮 Á¢±ÙÇã°¡;

          sid = dopen('subdir');

          * WORK ÇϺεð·ºÅ丮³» µð·ºÅ丮 ³»ÀÇ ÆÄÀÏ ¼ýÀÚ¸¦ ¾ò´Â´Ù.;

          numfiles = dnum(sid);

          do sind=1 to numfiles;

             * °¢ µð·ºÅ丮 ³»(SID)ÀÇ ÆÄÀÏÀ» Àд´Ù;

             fname = dread(sid,sind);

             if fname not in ('.','..') then do;

                rc = filename('workfile', "&wdir.\" || trim(workdir) || '\' || fname);

                if rc eq 0 then do;

                   * °¢ µð·ºÅ丮 ³»ÀÇ ÆÄÀÏÀ» ¼øÂ÷ÀûÀ¸·Î ÇÒ´ç;

                   rc = fdelete('workfile');

                   rc = filename('workfile','');

                end;

             end;

          end;

            rc = dclose(sid);

          * À§¿¡¼­ »ý¼ºµÈ WIN32 API¸¦ À§ÇÏ¿© WORK ÇϺεð·ºÅ丮 ³»ÀÇ µð·ºÅ丮 »èÁ¦;

          rc = modulen('RemoveDirectoryA', "&wdir.\" || trim(workdir));

          * ¸¸¾à µð·ºÅ丮¸¦ »èÁ¦ÇÏÁö ¸øÇÒ°æ¿ì ½ÇÇà;

          if rc ne 1 then do;

             * À̺¥Æ® ·Î±×¿¡ ¿¡·¯ »ý¼º;

             xcmd = '"'||&LOGEVENT||'"'||" -s E 'CLEANWRK.SAS failed to delete " ||

                    "&wdir.\" || workdir || "'";

             call system(xcmd);

             * ·Î±×¿¡ °æ°í Ãâ·Â;

             xput = "Warning! CLEANWRK.SAS failed to delete " ||

                    "&wdir.\" || workdir;

             put xput;

          end;

       end;

run;

filename sascbtbl catalog 'work.temp.winapi.source';

* The End;

¡¡


2007³â ¹é ½Â ¹Î Á¦ÀÛÇÏ¿´´ä´Ï´Ù. 
( http://cafe.daum.net/statsas , http://www.statwith.pe.kr )