#include <mach/mach.h> #include <stdio.h> #include <stdlib.h> #include <libproc.h> //#include <mach/thread_info.h> //#include <mach/task_info.h> int main(int argc, char **argv) { host_t myhost = mach_host_self(); host_t host_priv; mach_port_t psDefault; mach_port_t psDefault_control; task_array_t tasks; mach_msg_type_number_t numTasks; int i; thread_array_t threads; thread_info_data_t tInfo; kern_return_t kr; //hook("/usr/lib/libSystem.B.dylib", "mach_msg", mach_msg_hook); host_get_host_priv_port(mach_host_self(), &host_priv); kr = processor_set_default(host_priv, &psDefault); processor_set_name_array_t *psets = malloc(1024); mach_msg_type_number_t psetCount; kr = host_processor_sets ( host_priv, // host_priv_t host_priv, psets, // processor_set_name_array_t *processor_sets, &psetCount); // mach_msg_type_number_t *processor_setsCnt printf("COUNT: %d\n", psetCount); kr = host_processor_set_priv(host_priv, psDefault, &psDefault_control); if (kr != KERN_SUCCESS) { fprintf(stderr, "host_processor_set_priv failed with error %x\n", kr); mach_error("host_processor_set_priv",kr); exit(1);} printf("So far so good\n"); numTasks=1000; kr = processor_set_tasks(psDefault_control, &tasks, &numTasks); if (kr != KERN_SUCCESS) { fprintf(stderr,"processor_set_tasks failed with error %x\n",kr); exit(1); } for (i = 0; i < numTasks; i++) { char name[128]; int pid; pid_for_task(tasks[i], &pid); int rc= proc_name(pid, name, 128); printf("PID: %d %s\n",pid,name); } return (MACH_PORT_NULL); }