gpt4 book ai didi

c++ - 如何使用命令行参数创建一个新进程并将 PID 提供给父进程?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:27 25 4
gpt4 key购买 nike

我正在尝试创建一个跨平台函数来创建一个同时使用 Unix 和 Windows 的新进程。

在 Unix 中使用 fork() 和 exec() 非常简单。尽管我在 Windows 中无法弄清楚。我确定您知道 exec 函数不会返回 child 的 pid。在 Unix 中,fork 会那样做。但是 Windows 中没有 fork。所以我尝试使用 WinAPI 的 CreateProcess,但没有找到添加命令行参数的直接方法。

所以我在这里有点迷路,如果有人知道使用命令行参数创建新进程并将子进程的 pid 返回给父进程的方法,如果您愿意与我分享您的知识,我将不胜感激。

最佳答案

您可以在 Windows 中使用 createprocess() 函数。

签名如下

BOOL WINAPI CreateProcess(
_In_opt_ LPCTSTR lpApplicationName,
_Inout_opt_ LPTSTR lpCommandLine,
_In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_ BOOL bInheritHandles,
_In_ DWORD dwCreationFlags,
_In_opt_ LPVOID lpEnvironment,
_In_opt_ LPCTSTR lpCurrentDirectory,
_In_ LPSTARTUPINFO lpStartupInfo,
_Out_ LPPROCESS_INFORMATION lpProcessInformation
);

例子:

STARTUPINFO si;
PROCESS_INFORMATION pi; //This structure has process id

ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );

if( argc != 2 )
{
printf("Usage: %s [cmdline]\n", argv[0]);
return;
}

// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line)
argv[1], // Command line
NULL, // Process handle not inheritable
NULL, // Thread handle not inheritable
FALSE, // Set handle inheritance to FALSE
0, // No creation flags
NULL, // Use parent's environment block
NULL, // Use parent's starting directory
&si, // Pointer to STARTUPINFO structure
&pi ) // Pointer to PROCESS_INFORMATION structure
)
{
printf( "CreateProcess failed (%d).\n", GetLastError() );
return;
}

// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );

// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682512(v=vs.85).aspx

关于c++ - 如何使用命令行参数创建一个新进程并将 PID 提供给父进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com