Esempio n. 1
0
task_impl::task_impl( std::uintmax_t stamp, timeval elapsed,
                      const kinfo_proc &proc, logger_ptr logger )
    : m_proc( proc ), m_log( logger ), m_stamp( stamp )
{
    assert( m_log.get() != nullptr );

    m_pid = m_proc.kp_proc.p_pid;

    read_task_info( elapsed, true );
}
Esempio n. 2
0
/// Iterate all tasks and update/create their information.
/// @return The call returns -1 on error, 0 indicate successful completion.
static int read_tasks_table(void) 
{
     kern_return_t kr;
     processor_set_t     pset;
     task_array_t tasks;
     processor_set_name_array_t psets;
     mach_msg_type_number_t   i, j, pcnt, tcnt;

     kr = host_processor_sets(task_manager_port, &psets, &pcnt);
    if (kr != KERN_SUCCESS)
    {
          syslog(LOG_ERR, "error in host_processor_sets(): %s", mach_error_string(kr));
          return -1;
     }

     for (i = 0; i < pcnt; i++)
     {
          kr = host_processor_set_priv(task_manager_port, psets[i], &pset);
          if (kr != KERN_SUCCESS)
          {
               syslog(LOG_ERR, "error in host_processor_set_priv(): %s", mach_error_string(kr));
               return -1;
          }

          kr = processor_set_tasks(pset, &tasks, &tcnt);
          if (kr != KERN_SUCCESS)
          {
               syslog(LOG_ERR, "error in processor_set_tasks(): %s", mach_error_string(kr));
               return -1;
          }

          for (j = 0; j < tcnt; j++)
          {
               read_task_info(tasks[j]);

               kr = mach_port_deallocate(mach_task_self(), tasks[j]);
               if (kr != KERN_SUCCESS)
               {
                    syslog(LOG_WARNING, "%s, error in mach_port_deallocate(): %s", __FUNCTION__, mach_error_string(kr));
               }
          }
          kr = vm_deallocate(mach_task_self(), (vm_address_t)tasks, tcnt * sizeof(processor_set_t));
          kr = mach_port_deallocate(mach_task_self(), pset);
          kr = mach_port_deallocate(mach_task_self(), psets[i]);
     }

     kr = vm_deallocate(mach_task_self(), (vm_address_t)psets, pcnt * sizeof(processor_set_t));

     return 0;
}