ÄÚÈÝ·¢²¼¸üÐÂʱ¼ä : 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
// ´´½¨´«µÝ¹ýÀ´µÄ½ø³ÌµÄ¿Ë¡¹ý³Ì²¢¸³ÓÚÆä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
// ·µ»ØµÄÓÃÓÚ×Ó½ø³ÌµÄ½ø³ÌÐÅÏ¢ 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