¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé ÏÂÔØ±¾ÎÄ

ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 2026/2/22 19:53:52ÐÇÆÚÒ» ÏÂÃæÊÇÎÄÕµÄÈ«²¿ÄÚÈÝÇëÈÏÕæÔĶÁ¡£

¼ÆËã»ú¿ÆÑ§Óë¼¼Êõ¡¢ ÐÅÏ¢¹ÜÀíºÍÐÅϢϵͳרҵ ¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé

¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé

ʵÑéÒ» LinuxϵͳµÄ°²×°

Ò»¡¢ÊµÑéÄ¿µÄ

1¡¢ÉîÈëÈÏʶ´ÅÅÌ·ÖÇø

2¡¢ÕÆÎÕLinux°²×°µÄ»ù±¾¹ý³Ì 3¡¢ÕÆÎÕ¶àϵͳ¹²´æµÄϵͳ°²×°·½·¨ ¶þ¡¢ÊµÑéÈÎÎñ

ÔÚÏÖÓÐϵͳ°²×°Redhat Linuxϵͳ£¬×¢Òâ²»ÒªÆÆ»µÏÖÓÐϵͳ¡£ Èý¡¢ÊµÑéÖ¸µ¼

²Î¿¼¡¶LinuxÉÏ»úʵ¼ù½Ì³Ì¡·µÚÒ»ÕÂÄÚÈÝ¡£

ʵÑé¶þ LinuxϵͳµÄ»ù±¾Ê¹ÓÃ

Ò»¡¢ÊµÑéÄ¿µÄ

1¡¢ÊìϤlinuxϵͳµÄÆô¶¯¡¢µÇÈëºÍÍ˳ö 2¡¢ÊìϤlinuxϵͳÎļþºÍĿ¼µÄ»ù±¾Ê¹Óà 3¡¢ÊìϤÆäËü³£ÓÃÃüÁî¼°ÐéÄâÖն˵ÄʹÓà 4¡¢Ìå»álinuxϵͳ×÷Ϊ·ÖʱϵͳµÄÌØµã ¶þ¡¢ÊµÑéÈÎÎñ

Æô¶¯¡¢µÇÈëºÍÍ˳ölinuxϵͳ

Á·Ï°Ê¹ÓÃÎļþºÍĿ¼²Ù×÷µÄ»ù±¾ÃüÁî ʹÓÃËü³£ÓÃÃüÁî¼°ÐéÄâÖÕ¶Ë Á·Ï°Ê¹ÓÃVi±à¼­Æ÷ Èý¡¢ÊµÑéÖ¸µ¼

²Î¿¼¡¶LinuxÉÏ»úʵ¼ù½Ì³Ì¡·µÚ¶þ¡¢ÈýÕÂÄÚÈÝ¡£

ʵÑéÈý windows 2000Öнø³ÌµÄ´´½¨ºÍ¿ØÖÆ

Ò»¡¢ÊµÑéÄ¿µÄ

1¡¢¼ÓÉî¶Ô½ø³Ì¸ÅÄîµÄÀí½â£¬Ã÷È·½ø³ÌºÍ³ÌÐòµÄÇø±ð 2¡¢½øÒ»²½ÈÏʶ½ø³Ì²¢·¢Ö´ÐеÄʵÖÊ

3¡¢ÕÆÎÕwindows 2000Öнø³Ì´´½¨ºÍ¿ØÖƵıà³Ì·½·¨ ¶þ¡¢ÊµÑéÈÎÎñ

2

¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé

´´½¨Ò»¸öwindows´°¿Ú³ÌÐò,º¬ÓÐ4¸ö²Ëµ¥Ïî,·Ö±ðÓÃÀ´´´½¨ºÍ³·Ïû¼Çʱ¾½ø³ÌºÍ¼ÆËãÆ÷½ø³Ì¡£ÈôÏàÓ¦½ø³ÌÒѾ­´´½¨ÁË,ÔÙÑ¡Ôñ´´½¨½ø³Ì²Ëµ¥,Ôòµ¯³ö¶Ô»°¿òÌáʾ½ø³ÌÒѾ­´´½¨;Èô½ø³ÌÒѾ­³·ÏûÁË,ÔÙÑ¡Ôñ³·Ïû½ø³Ì²Ëµ¥,Ôòµ¯³ö¶Ô»°¿òÌáʾ½ø³ÌÒѾ­³·Ïû¡£×¢Ò⿼ÂÇ´ÓÖ÷³ÌÐòÍⲿÆô¶¯ºÍ¹Ø±Õ½ø³ÌµÄÇé¿ö¡£ Èý¡¢ÊµÑéÖ¸µ¼

1¡¢Win32µÄ½ø³ÌµÄ¸ÅÄî

½ø³ÌÊÇÓ¦ÓóÌÐòµÄÔËÐÐʵÀý£¬ÓÉ˽ÓÐÐéÄâµØÖ·¿Õ¼ä¡¢´úÂë¡¢Êý¾ÝºÍÆäËû²Ù×÷ϵͳ×ÊÔ´£¨Èç½ø³Ì´´½¨µÄÎļþ¡¢¹ÜµÀ¡¢Í¬²½¶ÔÏóµÈ£©×é³É¡£Ò»¸öÓ¦ÓóÌÐò¿ÉÒÔÓÐÒ»¸ö»ò¶à¸ö½ø³Ì£¬Ò»¸ö½ø³Ì¿ÉÒÔÓÐÒ»¸ö»ò¶à¸öỊ̈߳¬ÆäÖÐÒ»¸öÊÇÖ÷Ï̡߳£½ø³ÌÒªÍê³ÉʲôÊÂÇéµÄ»°±ØÐëÖÁÉÙÓµÓÐÒ»¸öỊ̈߳¬ÓÉÏß³ÌÀ´¸ºÔðÖ´Ðаüº¬ÔÚµØÖ·¿Õ¼äµÄ´úÂë¡£ 2¡¢Win32µÄ½ø³ÌµÄ´´½¨

WindowsËù´´½¨µÄÿ¸ö½ø³Ì¶¼´Óµ÷ÓÃCreateProcess() APIº¯Êý¿ªÊ¼£¬¸Ãº¯ÊýµÄÈÎÎñÊÇÔÚ¶ÔÏó¹ÜÀíÆ÷×ÓϵͳÄÚ³õʼ»¯½ø³Ì¶ÔÏó¡£CreateProcess() µ÷ÓõĺËÐIJÎÊýÊÇ¿ÉÖ´ÐÐÎļþÔËÐÐʱµÄÎļþÃû¼°ÆäÃüÁîÐС£Ï±íÏêϸµØÁгöÁËÿ¸ö²ÎÊýµÄÀàÐͺÍÃû³Æ¡£

±í CreateProcess() º¯ÊýµÄ²ÎÊý ²ÎÊýÃû³Æ LPCTSTR lpApplivationName LPCTSTR lpCommandLine LPSECURIITY_ATTRIBUTES lpProcessAttributes LPSECURIITY_ATTRIBUTES lpThreadAttributes BOOL bInheritHandle DWORD dwCreationFlage LPVOID lpEnvironment LPCTSTR lpCurrentDirectory STARTUPINFO lpStartupInfo LPPROCESS_INFORMATION lpProcessInformation ʹÓÃÄ¿µÄ È«²¿»ò²¿·ÖµØÖ¸Ã÷°üÀ¨¿ÉÖ´ÐдúÂëµÄEXEÎļþµÄÎļþÃû Ïò¿ÉÖ´ÐÐÎļþ·¢Ë͵IJÎÊý ·µ»Ø½ø³Ì¾ä±úµÄ°²È«ÊôÐÔ¡£Ö÷ÒªÖ¸Ã÷ÕâÒ»¾ä±úÊÇ·ñÓ¦¸ÃÓÉÆäËû×Ó½ø³ÌËù¼Ì³Ð ·µ»Ø½ø³ÌµÄÖ÷Ï̵߳ľä±úµÄ°²È«ÊôÐÔ Ò»ÖÖ±êÖ¾£¬¸æËßϵͳÔÊÐíнø³Ì¼Ì³Ð´´½¨Õß½ø³ÌµÄ¾ä±ú ÌØÊâµÄ´´½¨±êÖ¾ (ÈçCREATE_SUSPENDED) µÄλ±ê¼Ç Ïòнø³Ì·¢Ë͵ÄÒ»Ì×»·¾³±äÁ¿£»ÈçΪnullÖµÔò·¢Ë͵÷ÓÃÕß»·¾³ нø³ÌµÄÆô¶¯Ä¿Â¼ STARTUPINFO½á¹¹£¬°üÀ¨Ð½ø³ÌµÄÊäÈëºÍÊä³öÅäÖõÄÏêÇé µ÷ÓõĽá¹û¿é£»·¢ËÍÐÂÓ¦ÓóÌÐòµÄ½ø³ÌºÍÖ÷Ï̵߳ľä±úºÍID

¿ÉÒÔÖ¸¶¨µÚÒ»¸ö²ÎÊý£¬¼´Ó¦ÓóÌÐòµÄÃû³Æ£¬ÆäÖаüÀ¨Ïà¶ÔÓÚµ±Ç°½ø³ÌµÄµ±Ç°Ä¿Â¼µÄȫ·¾¶»òÕßÀûÓÃËÑË÷·½·¨ÕÒµ½µÄ·¾¶£»lpCommandLine²ÎÊýÔÊÐíµ÷ÓÃÕßÏòÐÂÓ¦ÓóÌÐò·¢ËÍÊý¾Ý£»½ÓÏÂÀ´µÄÈý¸ö²ÎÊýÓë½ø³ÌºÍËüµÄÖ÷Ïß³ÌÒÔ¼°·µ»ØµÄÖ¸Ïò¸Ã¶ÔÏóµÄ¾ä±úµÄ°²È«ÐÔÓйء£

È»ºóÊDZêÖ¾²ÎÊý£¬ÓÃÒÔÔÚdwCreationFlags²ÎÊýÖÐÖ¸Ã÷ϵͳӦ¸Ã¸øÓèнø³ÌʲôÐÐΪ¡£¾­³£Ê¹ÓõıêÖ¾ÊÇCREATE_SUSPNDED£¬¸æËßÖ÷Ïß³ÌÁ¢¿ÌÔÝÍ£¡£µ±×¼±¸ºÃʱ£¬Ó¦¸ÃʹÓÃResumeThread() APIÀ´Æô¶¯½ø³Ì¡£ÁíÒ»¸ö³£ÓõıêÖ¾ÊÇCREATE_NEW_CONSOLE£¬¸æËßнø³ÌÆô¶¯×Ô¼ºµÄ¿ØÖÆÌ¨´°¿Ú£¬¶ø²»ÊÇÀûÓø¸´°¿Ú¡£ÕâÒ»²ÎÊý»¹ÔÊÐíÉèÖýø³ÌµÄÓÅÏȼ¶£¬ÓÃÒÔÏòϵͳָÃ÷£¬Ïà¶ÔÓÚϵͳÖÐËùÓÐÆäËûµÄ»î¶¯½ø³ÌÀ´Ëµ£¬¸ø´Ë½ø³Ì¶àÉÙCPUʱ¼ä¡£

½Ó×ÅÊÇCreateProcess() º¯Êýµ÷ÓÃËùÐèÒªµÄÈý¸öͨ³£Ê¹ÓÃȱʡֵµÄ²ÎÊý¡£µÚÒ»¸ö²ÎÊýÊÇlpEnvironment²ÎÊý£¬Ö¸Ã÷Ϊнø³ÌÌṩµÄ»·¾³£»µÚ¶þ¸ö²ÎÊýÊÇlpCurrentDirectory£¬¿ÉÓÃÓÚÏòÖ÷´´½ø³Ì·¢ËÍÓëȱʡĿ¼²»Í¬µÄнø³ÌʹÓõÄÌØÊâµÄµ±Ç°Ä¿Â¼£»µÚÈý¸ö²ÎÊýÊÇ

3

STARTUPINFOÊý¾Ý½á¹¹Ëù±ØÐèµÄ£¬ÓÃÓÚÔÚ±ØÒªÊ±Ö¸Ã÷ÐÂÓ¦ÓóÌÐòµÄÖ÷´°¿ÚµÄÍâ¹Û¡£

CreateProcess() µÄ×îºóÒ»¸ö²ÎÊýÊÇÓÃÓÚнø³Ì¶ÔÏó¼°ÆäÖ÷Ï̵߳ľä±úºÍIDµÄ·µ»ØÖµ»º³åÇø¡£ÒÔPROCESS_INFORMATION½á¹¹Öзµ»ØµÄ¾ä±úµ÷ÓÃCloseHandle() APIº¯ÊýÊÇÖØÒªµÄ£¬ÒòΪÈç¹û²»½«ÕâЩ¾ä±ú¹Ø±ÕµÄ»°£¬ÓпÉÄÜΣ¼°Ö÷´´½ø³ÌÖÕֹ֮ǰµÄÈκÎδÊͷŵÄ×ÊÔ´¡£ 3¡¢ÖÕÖ¹½ø³Ì

ËùÓнø³Ì¶¼ÊÇÒÔµ÷ÓÃExitProcess() »òÕßTerminateProcess() º¯Êý½áÊøµÄ¡£µ«×îºÃʹÓÃǰÕß¶ø²»ÒªÊ¹ÓúóÕߣ¬ÒòΪ½ø³ÌÊÇÔÚÍê³ÉÁËËüµÄËùÓеĹرա°Ö°Ôð¡±Ö®ºóÒÔÕý³£µÄÖÕÖ¹·½Ê½À´µ÷ÓÃǰÕߵġ£¶øÍⲿ½ø³Ìͨ³£µ÷ÓúóÕß¼´Í»È»µÄ½øÐУ¬ÓÉÓڹرÕʱµÄ;¾¶²»Ì«Õý³££¬ÓпÉÄÜÒýÆð´íÎóµÄÐÐΪ¡£

TerminateProcess() APIº¯ÊýÖ»Òª´ò¿ª´øÓÐPROCESS_TERMINATE·ÃÎÊȨµÄ½ø³Ì¶ÔÏ󣬾ͿÉÒÔÖÕÖ¹½ø³Ì£¬²¢Ïòϵͳ·µ»ØÖ¸¶¨µÄ´úÂë¡£ÕâÊÇÒ»ÖÖ¡°Ò°Âù¡±µÄÖÕÖ¹½ø³ÌµÄ·½Ê½£¬µ«ÊÇÓÐʱȴÊÇÐèÒªµÄ¡£ 4¡¢ÈçºÎÅжÏÒ»¸ö½ø³ÌÊÇ·ñÆô¶¯»òÖÕÖ¹£¿

Èç¹ûÒ»¸ö½ø³ÌµÄÆô¶¯»òÖÕÖ¹ÍêÈ«ÓÉÖ÷½ø³Ì¿ØÖÆ£¬Ö»ÐèÒýÈëÒ»¸ö±êÖ¾½øÐÐÅжϼ´¿É¡£Èç¹ûÍⲿ¿ÉÒÔ¿ØÖƽø³ÌµÄÆô¶¯»òÖÕÖ¹£¬ÔòÇé¿öÒª¸´ÔÓһЩ¡£Í¨³£ÓÉÁ½ÖÖ·½·¨£¬Ò»ÊǸù¾Ý½ø³ÌµÄ³ÌÐòÃû³Æ£¬²éѯϵͳËùÓнø³Ì£¬ÒÔÈ·¶¨¸Ã³ÌÐòÊÇ·ñÒѾ­ÔËÐС£ÁíÒ»ÖÖ·½·¨ÊǸù¾Ý½ø³ÌµÄ´°¿Ú±êÌâ»ñµÃ´°¿Ú¾ä±ú£¬ÔÙ¸ù¾Ý´°¿Ú¾ä±ú»ñµÃÏàÓ¦µÄ³ÌÐòÃû³Æ£¬ÒÔÈ·¶¨¸Ã³ÌÐòÊÇ·ñÒѾ­ÔËÐС£ÒÔÏÂÊÇÏà¹ØµÄAPIº¯Êý£¬¿É²éÔÄMSDN£º HANDLE WINAPI CreateToolhelp32Snapshot(

DWORD dwFlags, DWORD th32ProcessID );

BOOL WINAPI Process32First( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); BOOL WINAPI Process32Next( HANDLE hSnapshot, LPPROCESSENTRY32 lppe ); HWND FindWindow(

LPCTSTR lpClassName, // pointer to class name

LPCTSTR lpWindowName // pointer to window name);

UINT WINAPI GetWindowModuleFileName( HWND hwnd,

LPTSTR lpszFileName, UINT cchFileNameMax);

5¡¢³ÌÐòʵÀý

±¾³ÌÐòÏÔʾÁË´´½¨×Ó½ø³ÌµÄ»ù±¾¿ò¼Ü¡£¸Ã³ÌÐòÖ»ÊÇÔÙÒ»´ÎµØÆô¶¯×ÔÉí£¬ÏÔʾËüµÄϵͳ½ø³ÌIDºÍËüÔÚ½ø³ÌÁбíÖеÄλÖᣠ# include

# include # include

// ´´½¨´«µÝ¹ýÀ´µÄ½ø³ÌµÄ¿Ë¡¹ý³Ì²¢¸³ÓÚÆäIDÖµ void StartClone(int nCloneID) {

// ÌáÈ¡ÓÃÓÚµ±Ç°¿ÉÖ´ÐÐÎļþµÄÎļþÃû TCHAR szFilename[MAX_PATH] ;

:: GetModuleFileName(NULL, szFilename, MAX_PATH) ;

4

¡¶²Ù×÷ϵͳ¡·ÊµÑéÖ¸µ¼Êé

// ¸ñʽ»¯ÓÃÓÚ×Ó½ø³ÌµÄÃüÁîÐв¢Í¨ÖªÆäEXEÎļþÃûºÍ¿Ë¡ID TCHAR szCmdLine[MAX_PATH] ;

:: sprintf(szCmdLine, ¡°\\¡±%s\\¡± %d¡±, szFilename, nCloneID) ;

// ÓÃÓÚ×Ó½ø³ÌµÄSTARTUPINFO½á¹¹ STARTUPINFO si;

:: ZeroMemory(reinterpret_cast (&si) , sizeof(si) ) ; si.cb = sizeof(si) ; // ±ØÐëÊDZ¾½á¹¹µÄ´óС

// ·µ»ØµÄÓÃÓÚ×Ó½ø³ÌµÄ½ø³ÌÐÅÏ¢ PROCESS_INFORMATION pi;

// ÀûÓÃͬÑùµÄ¿ÉÖ´ÐÐÎļþºÍÃüÁîÐд´½¨½ø³Ì£¬²¢¸³ÓÚÆä×Ó½ø³ÌµÄÐÔÖÊ BOOL bCreateOK = :: CreateProcess( szFilename, // ²úÉúÕâ¸öEXEµÄÓ¦ÓóÌÐòµÄÃû³Æ szCmdLine, // ¸æË߯äÐÐΪÏñÒ»¸ö×Ó½ø³ÌµÄ±êÖ¾ NULL, // ȱʡµÄ½ø³Ì°²È«ÐÔ NULL, // ȱʡµÄḬ̈߳²È«ÐÔ FALSE, // ²»¼Ì³Ð¾ä±ú CREATE_NEW_CONSOLE, // ʹÓÃеĿØÖÆÌ¨ NULL, // ÐµĻ·¾³ NULL, // µ±Ç°Ä¿Â¼ &si, // Æô¶¯ÐÅÏ¢ &pi) ; // ·µ»ØµÄ½ø³ÌÐÅÏ¢

// ¶Ô×Ó½ø³ÌÊÍ·ÅÒýÓà if (bCreateOK) {

:: CloseHandle(pi.hProcess) ; :: CloseHandle(pi.hThread) ; } }

int main(int argc, char* argv[] ) {

// È·¶¨½ø³ÌÔÚÁбíÖеÄλÖà int nClone(0) ; if (argc > 1) {

// ´ÓµÚ¶þ¸ö²ÎÊýÖÐÌáÈ¡¿Ë¡ID :: sscanf(argv[1] , ¡°%d¡± , &nClone) ; }

// ÏÔʾ½ø³ÌλÖÃ

std :: cout << ¡°Process ID: ¡° << :: GetCurrentProcessId() << ¡°, Clone ID: ¡° << nClone << std :: endl;

// ¼ì²éÊÇ·ñÓд´½¨×Ó½ø³ÌµÄÐèÒª const int c_nCloneMax = 25; if (nClone < C_nCloneMax) {

// ·¢ËÍнø³ÌµÄÃüÁîÐкͿË¡ºÅ StartClone(++nClone) ; }

// ÔÚÖÕֹ֮ǰÔÝͣһϠ(l/2Ãë) :: Sleep(500) ;

return 0; }

5