Windows 进程的一生

 
#   include<iostream.h> 
#
  include<windows.h> 
#
  include<stdio.h> 
//创建进程的克隆并赋予其ID值 

void  StartClone(int nCloneID) 

    
// 获取当前文件名 
    TCHAR  szFilename[MAX_PATH]; 
    
:: GetModuleFileName( NULL , szFilename , MAX_PATH); 
    
// 得到用于子进程的命令行,并将文件名和ID通知子进程 
    TCHAR szCmdLine[MAX_PATH]; 
    
:: sprintf (szCmdLine , " "%s"%d " , szFilename , nCloneID); 
    
// 用于子进程的STARTUPINFO结构 
    STARTUPINFO  si; 
    
:: ZeroMemory(reinterpret_cast < void *> ( & si) , sizeof (si)); 
    si
. cb = sizeof (si); 
    
// 返回用于子进程的进程信息 
    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 
         :: scanf(argv[ 1 ] , " %d " ,& nClone); 
    } 
    
// 显示进程位置 
    cout << " Process ID: " <<:: GetCurrentProcessId() 
        
<< " ,Clone ID: " << nClone 
        
<< endl; 
    
// 检查是否有创建子进程的需要 
     const   int c_nCloneMax = 5
    
if (nClone < c_nCloneMax) 
    { 
        
// 发送新进程的命令行和克隆号 
        StartClone( ++ nClone); 
    } 
    
// 在终止之前暂停一下(1/2秒) 
     :: Sleep ( 500 ); 
    
return   0


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值