Exemplo n.º 1
0
int
main(int argc, char **argv)
{
    kern_return_t          kr;
    host_priv_t            host_priv;
    processor_port_array_t processor_list;
    natural_t              processor_count;
    char                  *errmsg = PROGNAME;
   
    if (argc != 2) {
        fprintf(stderr,
                "usage: %s <cmd>, where <cmd> is \"exit\" or \"start\"\n",
                PROGNAME);
        exit(1);
    }
   
    kr = host_get_host_priv_port(mach_host_self(), &host_priv);
    EXIT_ON_MACH_ERROR("host_get_host_priv_port:", kr);   
   
    kr = host_processors(host_priv, &processor_list, &processor_count);
    EXIT_ON_MACH_ERROR("host_processors:", kr);
   
    // disable last processor on a multiprocessor system
    if (processor_count > 1) {
        if (*argv[1] == 'e') {
            kr = processor_exit(processor_list[processor_count - 1]);
            errmsg = "processor_exit:";
        } else if (*argv[1] == 's') {
            kr = processor_start(processor_list[processor_count - 1]);
            errmsg = "processor_start:";
        } else {
            kr = KERN_INVALID_ARGUMENT;
        }
    } else
        printf("Only one processor!\n");
   
    // this will deallocate while rounding up to page size
    (void)vm_deallocate(mach_task_self(), (vm_address_t)processor_list,
                        processor_count * sizeof(processor_t *));
    EXIT_ON_MACH_ERROR(errmsg, kr);
   
    fprintf(stderr, "%s successful\n", errmsg);
   
    exit(0);
}
Exemplo n.º 2
0
/// Initialize Task Info Manager internal data.
/// @return Upon successful completion 0 is returned. 
int task_info_manager_init(void) 
{
    static int completed = FALSE;
    if (completed == TRUE)
    {
        return 0;
    }

    kern_return_t kr;
    host_priv_t host_priv;
    processor_port_array_t processor_list;

    task_manager_port = mach_host_self();
    kr = host_get_host_priv_port(task_manager_port, &host_priv);
    if (KERN_SUCCESS == kr)
    {
        host_processors(host_priv, &processor_list, &processor_count);
    }

    CFDictionaryKeyCallBacks tasksKeysCallBask = {0, NULL, NULL, NULL, KeysCompareFunc, KeysHashFunc};
    CFDictionaryValueCallBacks tasksValueCallBask = {0, NULL, KeyFreeFunc, NULL, KeysCompareFunc};
    tasks_dict = CFDictionaryCreateMutable(NULL, 0, &tasksKeysCallBask, &tasksValueCallBask);

    host_info_record.seq = 1;

    int mib[2] = {CTL_HW, HW_MEMSIZE};
    size_t size;

    size = sizeof(host_info_record.memsize);
    if (sysctl(mib, 2, &host_info_record.memsize, &size, NULL, 0) == -1)
    {
        syslog(LOG_WARNING, "%s, Error in sysctl(): %m", __FUNCTION__);
        return -1;
    }

    gettimeofday(&host_info_record.time, NULL);

    man_info_init();
	stack_info_init();

    completed = TRUE;

    return 0;
}
Exemplo n.º 3
0
int
main(void)
{
    int                            i;
    kern_return_t                  kr;
    host_name_port_t               myhost;
    host_priv_t                    host_priv;
    processor_port_array_t         processor_list;
    natural_t                      processor_count;
    processor_basic_info_data_t    basic_info;
    processor_cpu_load_info_data_t cpu_load_info;
    natural_t                      info_count;
   
    myhost = mach_host_self();
    kr = host_get_host_priv_port(myhost, &host_priv);
    if (kr != KERN_SUCCESS) {
        mach_error("host_get_host_priv_port:", kr);
        exit(1);
    }
   
    processor_list = (processor_port_array_t)0;
    kr = host_processors(host_priv, &processor_list, &processor_count);
    if (kr != KERN_SUCCESS) {
        mach_error("host_processors:", kr);
        exit(1);
    }
    // #include <unistd.h> for getpid(2) and sleep(3)
    printf("processor_list = %p\n", processor_list);
    printf("my process ID is %d\n", getpid());
    sleep(60);
   
    printf("%d processors total.\n", processor_count);
   
    for (i = 0; i < processor_count; i++) {
        info_count = PROCESSOR_BASIC_INFO_COUNT;
        kr = processor_info(processor_list[i],
                            PROCESSOR_BASIC_INFO,
                            &myhost, 
                            (processor_info_t)&basic_info,
                            &info_count);
        if (kr == KERN_SUCCESS)
            print_basic_info((processor_basic_info_t)&basic_info);
   
        info_count = PROCESSOR_CPU_LOAD_INFO_COUNT;
        kr = processor_info(processor_list[i],
                            PROCESSOR_CPU_LOAD_INFO,
                            &myhost, 
                            (processor_info_t)&cpu_load_info,
                            &info_count);
        if (kr == KERN_SUCCESS)
            print_cpu_load_info((processor_cpu_load_info_t)&cpu_load_info);
    }
   
    // Other processor information flavors (may be unsupported)
    //
    //  PROCESSOR_PM_REGS_INFO,  // performance monitor register information
    //  PROCESSOR_TEMPERATURE,   // core temperature
   
   
    // This will deallocate while rounding up to page size
    (void)vm_deallocate(mach_task_self(), (vm_address_t)processor_list,
                        processor_count * sizeof(processor_t *));
   
    exit(0);
}