首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

VC++ 進程與多進程管理:CreateProcess 完整實戰指南

     編輯:VC 教學

進程基礎概念

進程是執行中程式的實例,包含核心物件(供系統管理)與位址空間(代碼、資料、堆疊、堆)。每個進程至少擁有一個主執行緒,主執行緒結束即進程終止。模組實例句柄 HINSTANCE 實為該模組在進程位址空間的基底位址(VC++ 預設 0x00400000),可透過 GetModuleHandle() 取得。

CreateProcess 詳細參數

BOOL CreateProcess(
    LPCTSTR lpApplicationName,      // 模組名稱(可為 NULL)
    LPTSTR lpCommandLine,           // 完整命令列字串
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,           // 句柄繼承
    DWORD dwCreationFlags,          // 建立旗標(如 CREATE_NEW_CONSOLE)
    LPVOID lpEnvironment,           // 環境區塊指標
    LPCTSTR lpCurrentDirectory,     // 工作目錄
    LPSTARTUPINFO lpStartupInfo,    // 啟動資訊
    LPPROCESS_INFORMATION lpProcessInformation // 輸出進程資訊
);

典型應用:啟動子進程並等待結束

CString cmd = _T("C:\\Windows\\Notepad.exe");
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi = {0};

if (CreateProcess(NULL, cmd.GetBuffer(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
    cmd.ReleaseBuffer();
    CloseHandle(pi.hThread); // 不需要主執行緒句柄
    WaitForSingleObject(pi.hProcess, INFINITE); // 等待結束
    DWORD exitCode;
    GetExitCodeProcess(pi.hProcess, &exitCode);
    CloseHandle(pi.hProcess);
    // exitCode 即子進程返回值
}

進程隔離的安全性考量

將高風險運算(如不穩定演算法、第三方外掛)放入獨立子進程,父進程僅透過管道、共享記憶體或 RPC 交換必要資料。子進程崩潰不影響主進程,實現錯誤隔離。

進階主題

  • 重導向標準輸入/輸出:在 STARTUPINFO 設定 hStdInput/Output/Error 並啟用 STARTF_USESTDHANDLES。
  • 非同步監控:使用 WaitForMultipleObjects 同時等待多個子進程,或建立專用監控執行緒。
  • 安全性屬性:透過 SECURITY_ATTRIBUTES 控制子進程存取權限。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved