AssignProcessToJobObject失败句柄无效
AssignProcessToJobObject Failing The Handle is Invalid
我用CreateJobObjectA()创建一个作业,然后用CreateProcessA()新建一个进程,当我试图将新进程分配给我用AssignProcessToJobObject()创建的作业时,它返回0。所以我获取LastError(),得到一个值6。根据Windows系统的错误代码,这意味着句柄无效。这是我的密码。
HANDLE job = CreateJobObjectA( NULL, "jobName" );
if( job == NULL )
{
printf( "Job is NULL" );
}
else
{
JOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 };
jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
if( 0 == SetInformationJobObject( job, JobObjectExtendedLimitInformation, &jeli, sizeof(jeli)))
{
printf("Could not SetInformationJobObjectn");
}
}
if( CreateProcessA( "C:\Windows\SysWOW64\cmd.exe", "/c server.bat", NULL, NULL, TRUE, 0, NULL, NULL, &info, &processInfo))
{
printf("CreateProcess succeeded.n");
if( job != NULL )
{
HANDLE derp = processInfo.hProcess;
if( derp != NULL )
{
if( 0 == AssignProcessToJobObject( job, derp ))
{
printf("Could not AssignProcessToObjectn");
DWORD err = GetLastError();
printf("derp");
}
}
}
//Can we free handles now? Not sure about this.
CloseHandle(processInfo.hProcess);
CloseHandle(processInfo.hThread);
}
bat文件正在做它应该做的事情,并启动一个运行服务器的jar。我只是不明白我的句柄是怎么失效的。任何帮助都将是惊人的。或者可能是另一种方式?
我想启动这个新进程,并将其作为子进程,这样当我的主进程崩溃时,服务器也会关闭。
谢谢。
您有一个竞赛条件。如果cmd.exe
在调用AssignProcessToJobObject
之前退出,它将不起作用(我不确定在这种情况下会得到什么错误代码)。
使用CREATE_SUSPENDED
标志启动挂起的进程,在将其分配给作业之前不要继续执行。
相关文章:
- 枚举进程模块在有效句柄上返回无效句柄
- 未知C++错误:致命错误:glibc检测到无效的stdio句柄
- 获取进程内存信息失败,错误 6 句柄无效
- 发布信号量返回错误 6(无效句柄)
- 如何测试 USB HID 句柄由于设备被重新插入而无效
- 为什么错误1400无效的窗口句柄
- 打电话给谁是无效的关闭手(句柄)是安全的吗?
- 在列表视图中启用分组 - 无效句柄
- DirectShow BindToObject返回无效句柄
- DoModal 返回 -1 Getlasterror 说句柄无效
- C++RegOpenKeyEx-错误6:句柄无效
- 错误 6 句柄在 Windows 上写入文件无效
- 错误 1400 无效的窗口句柄
- 无效句柄(使用应用程序验证程序)
- Qt 5.8 windows打印机api无效句柄错误
- FindFirstFile总是返回无效句柄
- ReadFileEx使用CreateFile的有效句柄时出现无效句柄错误
- GetThreadContext返回错误6,无效句柄
- OpenProcess函数返回无效句柄
- 为什么创建文件返回无效句柄