作業 (電腦)

在計算機科學中,作業(英語:job)和工作(英語:task,又譯為任務)是在記憶體中的一組程式指令。它包括了一段虛擬定址空間分頁,與作業系統資源,提供執行緒運行的空間。有時候,它與行程被認為是同義的;但也有人認為,在即時系統(real-time)中運行的行程才被稱為作業。

Windows作业对象编辑

Windows 2000操作系统开始,job是一组进程的集合,用于限制其使用的资源、性能信息统计维护、自动关闭子进程等。允许将进程组合在一起并创建一个进程的"容器"来限制进程能够做什么。无法将当前进程或它的任何子进程从作业中去除,这个安全特性可以确保进程无法摆脱对它施加的限制。Win32关于作业的API:

  • CreateJobObject:创建作业内核对象。若该作业已经存在,则返回一个指向该作业的句柄
  • OpenJobObject:打开命名的作业内核对象
  • CloseHandle:关闭一个作业内核对象句柄(不会自动终止作业中的进程)
  • IsProcessInJob:验证某一个进程是否存在于作业中
  • AssignProcessToJobObject:增加一个进程句柄到一个作业内核对象
  • TerminateJobObject:终止一个作业的所有进程
  • SetInformationJobObject:给job设置资源限制。作业句柄参数不能传递NULL值,以防止进程删除施加于自己身上的限制
  • QueryJobInformationObject:查询job资源限制。进程可以调用它获得其所属作业的相关信息(作业句柄参数传递NULL值),使进程能看到自己被施加了哪些限制。

使用CreateProcess创建的子进程默认属于父进程所在的job,除非CreateProcess函数的dwCreationFlags参数设置了CREATE_BREAKAWAY_FROM_JOB标志。这种情况下,不能用AssignProcessToJobObject函数把子进程关联入job。

作业的所有进程都终止,则作业对象被触发(signaled)。

示例编辑

#include <windows.h>int main(){HANDLE hJob = CreateJobObject(0, 0);if (hJob){//JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli;//memset(&jeli, 0, sizeof(jeli));//jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;                //Place some restrictions on processes in the job.                JOBOBJECT_BASIC_LIMIT_INFORMATION jobli = { 0 };                 jobli.PriorityClass = IDLE_PRIORITY_CLASS;//The process always runs in the idle priority class.                jobli.PerJobUserTimeLimit.QuadPart = 10000000;  //The job cannot use more than 1 second of CPU time. 100-ns pricision                jobli.LimitFlags = JOB_OBJECT_LIMIT_PRIORITY_CLASS | JOB_OBJECT_LIMIT_JOB_TIME;      if (SetInformationJobObject(hJob, JobObjectExtendedLimitInformation, &jobli, sizeof(jobli))){if (AssignProcessToJobObject(hJob, GetCurrentProcess())){WinExec("notepad.exe", SW_SHOW); //I assume that there will never be more than 10 processes in this job.#define MAX_PROCESS_IDS     10//Calculate the number of bytes needed for  structure  & process IDs.DWORD Cb = sizeof(JOBOBJECT_BASIC_PROCESS_ID_LIST) +(MAX_PROCESS_IDS - 1) * sizeof(DWORD);//Allocate the block of memory.PJOBOBJECT_BASIC_PROCESS_ID_LIST pjobpil = PJOBOBJECT_BASIC_PROCESS_ID_LIST)_alloca(Cb);//Tell the function the maximum number of processes  that we allocated space for.pjobpil->NumberOfAssignedProcesses = MAX_PROCESS_IDS;//Request the current set of process IDs.BOOL bRes = QueryInformationJobObject(hJob, JobObjectBasicProcessIdList,pjobpil, Cb, &Cb);//Enumerate the process IDs.for (int x = 0; x < pjobpil->NumberOfProcessIdsInList; x++){wchar_t ExeName[1024];DWORD len = 1024;HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, pjobpil->ProcessIdList[x]);BOOL Res = QueryFullProcessImageName(hProcess, //_In_    HANDLE hProcess,NULL, //_In_    DWORD  dwFlags,ExeName, //_Out_   LPTSTR lpExeName,&len //_Inout_ PDWORD lpdwSize);DWORD dwLastError =GetLastError();} }}                CloseHandle(hJob);}return 0;}

參見编辑

🔥 Top keywords: Baike: 首页Special:搜索胖猫跳江事件背着善宰跑九龍城寨之圍城逆天奇案2璩静淚之女王歌手2024Energy (組合)新生 (网络剧)习近平匈牙利邊佑錫劉俊謙 (香港)金智媛神耆小子塞尔维亚金秀賢 (男演員)母亲节猩球崛起:王國誕生九龍寨城馴鹿寶貝家族榮耀之繼承者Seventeen (組合)六四事件不夠善良的我們张维为楊佩潔TripleS支配物种庆余年郭葦昀洪若潭命案金惠奫2024年英雄联盟季中邀请赛春色寄情人BABYMONSTER笑看風雲乘風2024排球少年!!角色列表破墓徐巧芯中华人民共和国中華民國打天下2WIND BREAKER—防風少年—习明泽排球少年!!彭丽媛磁暴ILLIT贾斯汀·比伯逆天奇案BOYNEXTDOOR猿人爭霸戰:猩凶革命張書偉我的婆婆怎麼那麼可愛我獨自升級怪獸8號謝坤達IVE (組合)與鳳行關於我轉生變成史萊姆這檔事角色列表黃道十二宮福建號航空母艦虽然不是英雄葉乃文五月天張員瑛草榴社区張文傑2024年花蓮地震极光香緹·摩爾迷宮飯呂家愷搜查班長1958日本劉德華海莉·鮑德溫蕭景鴻越位 (足球)葬送的芙莉蓮周處除三害 (電影)毛泽东願榮光歸香港林峯周雨彤伍允龍羅毓儀香港Baike: 分類索引沒有秘密猩球崛起:終極決戰角質層唐振剛柯佳嬿文化大革命