createJobObjectA 函数 (winbase.h)

创建或打开作业对象。

语法

HANDLE CreateJobObjectA(
  [in, optional] LPSECURITY_ATTRIBUTES lpJobAttributes,
  [in, optional] LPCSTR                lpName
);

参数

[in, optional] lpJobAttributes

指向 SECURITY_ATTRIBUTES 结构的指针,该结构指定作业对象的安全描述符,并确定子进程是否可以继承返回的句柄。 如果 lpJobAttributesNULL,则作业对象将获取默认的安全描述符,并且无法继承句柄。 作业对象的默认安全描述符中的 ACL 来自创建者的主要令牌或模拟令牌。

[in, optional] lpName

作业的名称。 名称限制为 MAX_PATH 个字符。 名称比较区分大小写。

如果 lpNameNULL,则会创建不带名称的作业。

如果 lpName 与现有事件、信号灯、互斥体、可等待计时器或文件映射对象的名称匹配,则函数将失败, GetLastError 函数将返回 ERROR_INVALID_HANDLE。 发生这种情况的原因是这些对象共享相同的命名空间。

可以在专用命名空间中创建 对象。 有关详细信息,请参阅 对象命名空间

终端服务: 名称可以具有“Global”或“Local”前缀,以在全局命名空间或会话命名空间中显式创建对象。 名称的其余部分可以包含除反斜杠字符 (\) 以外的任何字符。 有关详细信息,请参阅 内核对象命名空间

返回值

如果函数成功,则返回值是作业对象的句柄。 句柄具有 JOB_OBJECT_ALL_ACCESS 访问权限。 如果对象在函数调用之前存在,则函数返回现有作业对象的句柄, GetLastError 返回 ERROR_ALREADY_EXISTS

如果函数失败,则返回值为 NULL。 要获得更多的错误信息,请调用 GetLastError。

注解

创建作业时,其记帐信息初始化为零,所有限制都处于非活动状态,并且没有关联的进程。 若要将进程分配给作业对象,请使用 AssignProcessToJobObject 函数。 若要为作业设置限制,请使用 SetInformationJobObject 函数。 若要查询记帐信息,请使用 QueryInformationJobObject 函数。

与作业关联的所有进程都必须在同一会话中运行。 作业与要分配给作业的第一个进程的会话相关联。

Windows Server 2003 和 Windows XP: 作业与创建作业的进程会话相关联。

若要关闭作业对象句柄,请使用 CloseHandle 函数。 当作业的最后一个句柄已关闭且所有关联的进程都退出时,该作业将被销毁。 但是,如果作业指定了 JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 标志,则关闭最后一个作业对象句柄会终止所有关联的进程,然后销毁作业对象本身。

若要编译使用此函数的应用程序, 请将_WIN32_WINNT 定义为 0x0500 或更高版本。 有关详细信息,请参阅 使用 Windows 标头

要求

   
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 winbase.h (包括 Windows.h、Jobapi2.h)
Library Kernel32.lib
DLL Kernel32.dll

另请参阅

AssignProcessToJobObject

CloseHandle

作业对象

进程和线程函数

QueryInformationJobObject

SECURITY_ATTRIBUTES

SetInformationJobObject