#
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 ;
}
# 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 ;
}