2012-09-07 4 views
13

का उपयोग कर चल रहा है, मैंने वर्तमान में आईओएस पर सभी चल रही प्रक्रियाओं को देखने के लिए एक सरल गतिविधि मॉनिटर लागू किया है।पता लगाएं कि कौन सा ऐप वर्तमान में आईओएस पर sysctl

चल रहे सभी प्रक्रियाओं की सूची प्राप्त करने के लिए, मैं यह कर:

size_t size; 
struct kinfo_proc *procs = NULL; 
int status; 
NSMutableArray *killedProcesses = [[NSMutableArray alloc] init]; 

int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_ALL, 0 }; 

status = sysctl(mib, 4, NULL, &size, NULL, 0); 
procs = malloc(size); 
status = sysctl(mib, 4, procs, &size, NULL, 0); 

// now, we have a nice list of processes 

और अगर मैं एक विशिष्ट प्रक्रिया के बारे में अधिक जानकारी चाहते हैं, मैं करूँगा:

struct kinfo_proc *proc; 
int mib[5] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, pidNum, 0 }; 
int count; 
size_t size = 0; 

// ask the proc size 
if(sysctl(mib, 4, NULL, &size, NULL, 0) < 0) return -1; 

// allocate memory for proc 
proc = (struct kinfo_proc *)malloc(size); 

sysctl(mib, 4, proc, &size, NULL, 0); 

सभी अतिरिक्त मैं चाहता हूं कि proc info अब proc में संग्रहीत है।

मुझे पता है कि ऐप्स ओएस द्वारा नहीं मारा जाएगा। यहां तक ​​कि जब एक ऐप का उपयोग लंबे समय तक नहीं किया जाता है (10 मिनट से अधिक) यह प्रक्रिया सूची में रहेगा। यहां तक ​​कि जब मैं पूछता हूं कि प्रक्रिया में "राज्य" क्या है (proc-> kp_proc.p_stat), यह "चल रहा है" देता है।

मेरा प्रश्न है: क्या किसी को यह पता लगाने के लिए कोई तरीका पता है कि कौन सा पीआईडी ​​वर्तमान में चल रहा है/सक्रिय रूप से उपयोग किया जा रहा है (शायद: सीपीयू समय बढ़ाना? चलने का समय? सीपीयू टिक इत्यादि) ??

+0

पहले, मैं आप के लिए एक प्रश्न है। जब p_stat का मान 2 होता है, तो इसका मतलब यह है कि यह प्रक्रिया चल रही है? जब मैं सिम्युलेटर पर चलता हूं, मैंने पाया कि कुछ प्रक्रियाओं में 5 का p_stat मान है। इसके अलावा, मैंने पाया कि टिक या सीपीयू समय के लिए सभी मान 0 हैं। ऐसा लगता है कि ये मान कभी भी डार्विन में स्टेट नहीं होते हैं। मुझे नहीं पता कि यह मुफ्त बीएसडी में समान है या नहीं। – HChen

+0

नहीं। मान कहीं भी बदलते प्रतीत नहीं होते हैं ... इसलिए अब तक – hackerdiehack

+1

@hackerdiehack से चलने वाली प्रक्रिया का कोई संकेत नहीं है क्या आप जानते हैं कि प्रक्रिया अग्रभूमि या पृष्ठभूमि में कब होती है? –

उत्तर

2

"वर्तमान में चल रहे" अपने प्रश्न का हिस्सा उत्तर देना:

मैं इस सवाल का जवाब Can we retrieve the applications currently running in iPhone and iPad

k_proc घोषणाओं यहाँ के बाद देखा से कोड का इस्तेमाल किया: http://www.opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/sys/proc.h

परीक्षण और त्रुटि के साथ पता चला कि 18432 पर सेट p_flag के साथ प्रक्रिया वर्तमान में चल रहा अनुप्रयोग है (इस मामले में यह परीक्षण)।

पहले लिंक देखें, और साथ चक्र के लिए की अंदरूनी बदल देते हैं:

if (process[i].kp_proc.p_flag == 18432){ 

         NSString * processID = [[NSString alloc] initWithFormat:@"%d", process[i].kp_proc.p_pid]; 
         NSString * processName = [[NSString alloc] initWithFormat:@"%s", process[i].kp_proc.p_comm]; 
         NSString * status  = [[NSString alloc] initWithFormat:@"%d",process[i].kp_proc.p_flag ]; 

         NSDictionary * dict = [[NSDictionary alloc] initWithObjects:[NSArray arrayWithObjects:processID, processName,status, nil] 
                      forKeys:[NSArray arrayWithObjects:@"ProcessID", @"ProcessName",@"flag", nil]]; 

         [array addObject:dict]; 

} 
+0

जो मेरे लिए काम नहीं कर रहा है ... आप इसे कैसे देखते हैं? मैंने निम्न कोशिश की: kp_proc.p_flag == 18432 – hackerdiehack

+0

दुर्भाग्यवश, यह केवल वर्तमान ऐप लौटाता है जिसे डीबग किया जा रहा है: / – hackerdiehack

संबंधित मुद्दे