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