Process进程
来源:互联网 发布:正整数分解质因数算法 编辑:程序博客网 时间:2024/05/16 11:13
// 创建一个新进程来运行指定的另一个可执行程序。CreateProcess()创建一个// 新进程和其主线程,以运行指定(路径/文件名或命令行)的应用程序.// 成功返回非0,失败返回0,可用GetLastError()返回出错的代码//BOOL CreateProcess( //LPCTSTR lpApplicationName, // 可执行文件的全路径或文件名,有命令行时可为NULL //LPTSTR lpCommandLine, // 命令行参数,有可应用名时可为NULL //LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程的安全属性,NULL表示默认安全 //LPSECURITY_ATTRIBUTES lpThreadAttributes, // 主线程的安全属性,NULL表示默认安全 //BOOL bInheritHandles, // 子进程是否继承新进程的句柄 //DWORD dwCreateFlags, // 创建标志,用于设置进程的创建状态和优先级别,可为NULL //LPVOID lpEnvironment, // 环境变量,为NULL时,同当前进程的 //LPCTSTR lpCurrentDirectory, // 进程运行的当前目录,为NULL时同当前进程的 //LPSTARTUPINFO lpStartupInfo, // 指向设置进程主窗口或控制条的各种属性的结构指针 //LPPROCESS_INFORMATION lpProcessInformation // 指向返回进程信息的结构指针 //);//结构STARTUPINFO和PROCESS_INFORMATION的定义分别为: // typedef struct _STARTUPINFO { //DWORD cb; // 结构的长度(字节数) //LPTSTR lpReserved; // 保留,必须为NULL //LPTSTR lpDesktop; // 桌面-窗口站的名称 //LPTSTR lpTitle; // 控制台进程的标题 //DWORD dwX; // 窗口位置的横坐标 //DWORD dwY; // 窗口位置的纵坐标 //DWORD dwXSize; // 窗口的水平尺寸 //DWORD dwYSize; // 窗口的垂直尺寸 //DWORD dwXCountChars; // 控制台窗口的屏幕缓冲区宽度(字符数) //DWORD dwYCountChars; // 控制台窗口的屏幕缓冲区高度(字符数) //DWORD dwFillAttribute; // 控制台窗口的初始文本和背景色 //DWORD dwFlags; // 窗口的创建标志 //WORD wShowWindow; // 用作窗口显示函数ShowWindow的缺省参数 //WORD cbReserved2; // 保留,必须为0 //LPBYTE lpReserved2; // 保留,必须为NULL //HANDLE hStdInput; // 标准输入的句柄 //HANDLE hStdOutput; // 标准输出的句柄 //HANDLE hStdError; // 标准错误的句柄 //} STARTUPINFO, *LPSTARTUPINFO; //typedef struct _PROCESS_INFORMATION { //HANDLE hProcess; // 返回的进程句柄 //HANDLE hThread; // 返回的主线程句柄 //DWORD dwProcessId; // 返回的进程ID //DWORD dwThreadId; // 返回的主线程ID //} PROCESS_INFORMATION, *LPPROCESS_INFORMATION; // 处理可从创建进程函数CreateProcess的最后一个参数进程信息结构PROCESS_INFORMATION// 变量来获取所创建的新进程及其主线程的句柄和ID外,还可利用API函数// GetCurrentProcess和GetCurrentProcessId 来获取当前进程的句柄和ID: // HANDLE GetCurrentProcess(void); // DWORD GetCurrentProcessId(void); // 不过用GetCurrentProcess返回的是一个伪句柄,只能在当前进程中使用。// 可以调用API函数DuplicateHandle将此伪句柄转换为一个真正的句柄。// 在Windows操作系统中,进程有6种优先级别(priority level/class),从低到高分别为:// 空闲(Idel)、低普通(Below normal)、普通(Normal)、高普通(Above normal)// 高(High)和实时(Real time),对应的符号常量为: // 符号常量 对应数值 // IDLE_PRIORITY_CLASS 0x00000040 // BELOW_NORMAL_PRIORITY_CLASS 0x00004000 // NORMAL_PRIORITY_CLASS 0x00000020 // ABOVE_NORMAL_PRIORITY_CLASS 0x00008000 // HIGH_PRIORITY_CLASS 0x00000080 // REALTIME_PRIORITY_CLASS 0x00000100 // 可以在创建新进程时,利用其创建标志参数dwCreationFlags来设置。// 也可以用API函数GetPriorityClass和SetPriorityClass来获取和设置指定进程的优先级: // DWORD GetPriorityClass( HANDLE hProcess ); // BOOL SetPriorityClass( HANDLE hProcess, DWORD dwPriorityClass ); // 例如: // DWORD p = GetPriorityClass( GetCurrentProcess() ); // SetPriorityClass( GetCurrentProcess(), IDLE_PRIORITY_CLASS );// 等待进程返回可以调用API函数WaitForSingleObject来等待指定进程(或线程)结束后返回: // DWORD WINAPI WaitForSingleObject( HANDLE hHandle, DWORD dwMilliseconds ); // 例如:WaitForSingleObject( pi.hProcess, INFINITE ); // 结束进程,对控制台程序,在接受到ctrl+c或者ctrl+break信号后会结束进程// void ExitProcess(UINT uExitCode); // 结束当前进程// BOOl TerminateProcess(HANDLE hProcess, UINT uExitCode); // 结束指定进程// 进程的所有线程终止后进程也会自动终止,在用户关闭系统或注销退出系统时// 也会导致进程终止。在结束进程后,还有调用API的CloseHandle()函数来删除// 进程和线程对象// CloseHandle(pi.hProcess);// CloseHandle(pi.hThread);#include <Windows.h>#include <stdio.h>#include <tchar.h>int main(){ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); // Start the child process BOOL bSucceed = CreateProcess( _T("D:\\vs2010_projects\\0524-1\\Debug\\0516Caret.exe"), // 可执行文件路径或文件名 NULL, // 命令行参数 NULL, // 进程安全属性 NULL, // 主线程的安全属性 FALSE, // 是否继承父进程句柄 0, // 创建标志,0表示立即执行 NULL, // 使用父进程的环境变量 NULL, // 使用父进程的当前目录 &si, // 指向设置进程主窗口或控制条的各种属性的结构指针 &pi // 指向返回进程信息的结构指针 ); if(bSucceed == FALSE) { printf("CreateProcess failed(%d)\n", GetLastError()); return 1; } // Wait until child porcess exits. WaitForSingleObject(pi.hProcess, INFINITE); // Close process and thread handles 关闭进程和主线程句柄 CloseHandle(pi.hProcess); CloseHandle(pi.hThread); getchar(); return 0;}
阅读全文
0 0
- 进程-process
- Process 进程
- 进程process
- Process进程
- Process(进程)学习
- Process进程的操作
- System Idle Process进程
- 进程代数 Process Algebra
- Process 启动进程
- 进程(Process)
- 僵尸进程 (Zombie Process)
- Process进程的了解
- 进程切换(process switch)
- nodejs入门--process 进程
- Process Creation进程创建
- Android中的进程(Process)
- Process进程、Thread线程
- java进程调用 Process
- 【KM】POJ3565[Ants]题解
- 排序-快速排序-Java
- 2017/05/31 错误:找不到或无法加载主类 HelloWorld
- 设计一个ip网段黑名单过滤(网易面试题)
- 初学数据结构---查找
- Process进程
- 理解null关键字及集合或字符串需先判断null再判断长度的原因
- KM算法 模板
- ZCMU—1932
- tmpnam
- oracle DBaaS 数据库云服务实践之一添加主机失败解决
- 开发H5游戏引擎的选择:Egret或Laya?
- 优先队列实现成员的增减
- 1127. ZigZagging on a Tree (30)[二叉树构建-dfs-bfs]