KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I am in need of a way to retrieve all running processes for all users on a Mac (using Cocoa). I found an implementation to retrieve the process using sysctl, but I also need the running user. This is a snipping of what I've got to get the process list, but is there a way to modify it to include the user as well? int err; kinfo_proc * result; bool done; static const int name[] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; size_t length; // a valid pointer procList holder should be passed assert( procList != NULL ); // But it should not be pre-allocated assert( *procList == NULL ); // a valid pointer to procCount should be passed assert( procCount != NULL ); *procCount = 0; result = NULL; done = false; do { assert( result == NULL ); // Call sysctl with a NULL buffer to get proper length length = 0; err = sysctl((int *)name,(sizeof(name)/sizeof(*name))-1,NULL,&length,NULL,0); if( err == -1 ) err = errno; // Now, proper length is optained if( err == 0 ) { result = malloc(length); if( result == NULL ) err = ENOMEM; // not allocated } if( err == 0 ) { err = sysctl( (int *)name, (sizeof(name)/sizeof(*name))-1, result, &length, NULL, 0); if( err == -1 ) err = errno; if( err == 0 ) done = true; else if( err == ENOMEM ) { assert( result != NULL ); free( result ); result = NULL; err = 0; } } } while ( err == 0 && !done ); // Clean up and establish post condition if( err != 0 && result != NULL ) { free(result); result = NULL; } *procList = result; // will return the result as procList if( err == 0 ) *procCount = length / sizeof( kinfo_proc ); assert( (err == 0) == (*procList != NULL ) ); return err;
Tags (comma-separated)
Save Edits
Cancel