文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Windows编程 所谓的进程"作业"是什么?

Windows编程 所谓的进程"作业"是什么?

时间:2010-11-09  来源:kgisme170

        Windows有一个"任务管理器",用户可以在里面启动/中止一个进程,察看进程的cpu/io使用状况。当然,Windows也允许用户开发自己的一个"任务管理器",用来自动化的管理某些进程的运行情况,这个"沙盒"就叫做"作业",通过把若干个进程启动在"作业"里面,我们可以限制这些进程的各种资源消耗,功能,安全性等等。例如,我有一个小程序(无限循环的),但是我不知道它里面有死循环,我希望它的运行时间不要超过0.1s就退出,我可以用"作业"来控制它。

目标程序代码:

#include "stdafx.h"
#include<Windows.h>
#include<stdio.h>
void myexit(void){
    printf("\n子进程 退出\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
    printf("\n子进程 开始\n");
    atexit(myexit);
    int i=0;
    while(1)printf("%d\n",++i);
    return 0;
}


作业进程代码,由它来启动上面这个进程:

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
#include <WinBase.h>
int _tmain(int argc, _TCHAR* argv[]){
    HANDLE hjob=CreateJobObject(NULL,NULL);//name can be null

    JOBOBJECT_BASIC_LIMIT_INFORMATION jobin={0};
    jobin.PriorityClass=IDLE_PRIORITY_CLASS;
    LARGE_INTEGER li;
    li.QuadPart=100000;
    jobin.PerJobUserTimeLimit=li;//100ns as a "1"

    jobin.LimitFlags=JOB_OBJECT_LIMIT_PRIORITY_CLASS|JOB_OBJECT_LIMIT_JOB_TIME;
    SetInformationJobObject(hjob,JobObjectBasicLimitInformation,&jobin,sizeof(jobin));
    STARTUPINFO si={sizeof(si)};
    PROCESS_INFORMATION pi;
    CreateProcess(NULL,"..\\Debug\\client.exe",0,0,FALSE,CREATE_SUSPENDED,0,0,&si,&pi);
    AssignProcessToJobObject(hjob,pi.hProcess);
    ResumeThread(pi.hThread);
    CloseHandle(pi.hThread);
    HANDLE h[2]={pi.hProcess,hjob};
    DWORD dw=WaitForMultipleObjects(2,h,FALSE,INFINITE);
    switch(dw-WAIT_OBJECT_0){
    case 0:
        printf("进程自行中止\n");
        break;
    case 1:
        printf("进程cpu时间用完,强行中止\n");
        break;
    }
    CloseHandle(pi.hProcess);
    CloseHandle(hjob);
    TerminateJobObject(hjob,0);
    return 0;
}


运行结果:
子进程开始:
....
....
19775
19776
19777
19778
19779
19780
19781
进程cpu时间用完,强行中止
Press any key to continue . . .
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载