set listofprocesses to every process
set allprocess to {}
repeat with processitem in listofprocesses
set procname to name of processitem as string
set processid to unix id of processitem as string
set processdic to
copy processdic to end of allprocess
end repeat
return allprocess
end tell
在專案中執行上述指令碼,可獲取到大部分正在執行中的process,注意,是大部分,例如adb使用該方式獲取不到,因此,繼續探索其他方式。
可以通過ps命令獲取,但是該方法需要自己解析,速度和效率較低,在此不適用。
#define maxcomlen 16 //defined in param.h
struct extern_proc ;
pid_t pids[1024];
int numberofprocesses = proc_listpids(proc_all_pids, 0, null, 0);
proc_listpids(proc_all_pids, 0, pids, sizeof(pids));
for (int i = 0; i < numberofprocesses; ++i)
char name[1024];
proc_name(pids[i], name, sizeof(name));
printf("found process: %s\n", name);
}
雖然可以檢索到資訊,但是和getbsdprocesslist
一樣存在程序名顯示不全的問題
processserialnumber psn;
psn.lowlongofpsn = knoprocess;
psn.highlongofpsn = 0;
while (getnextprocess(&psn) == noerr)
cfrelease(procname);
}
抱歉,這種方式行不通。它只返回在windowserver(或類似的東西)中註冊的程序。換句話說,它只返回帶有ui的應用程式,而且只針對當前使用者。
只返回當前使用者在dock**現的應用程式的資訊。
#import #import int numberofprocesses = proc_listpids(proc_all_pids, 0, null, 0);
pid_t pids[numberofprocesses];
bzero(pids, sizeof(pids));
proc_listpids(proc_all_pids, 0, pids, sizeof(pids));
for (int i = 0; i < numberofprocesses; ++i)
char pathbuffer[proc_pidpathinfo_maxsize];
bzero(pathbuffer, proc_pidpathinfo_maxsize);
proc_pidpath(pids[i], pathbuffer, sizeof(pathbuffer));
if (strlen(pathbuffer) > 0)
}
這個方法很是管用,但是在osx10.15beta系統中有問題,獲取到的numberofprocesses為0
#import #import - (nsarray *)runningprocesses ;
u_int miblen = 4;
size_t size;
int st = sysctl(mib, miblen, null, &size, null, 0);
struct kinfo_proc * process = null;
struct kinfo_proc * newprocess = null;
do return nil;
}process = newprocess;
st = sysctl(mib, miblen, process, &size, null, 0);
} while (st == -1 && errno == enomem);
if (st == 0);
[array addobject:dict];}}
free(process);
return [array copy];}}
}return nil;
}- (nsstring *)getprocessnamewithpid:(pid_t)pid
strcpy(namebuffer, pathbuffer + position + 1);
processname = [nsstring stringwithutf8string:namebuffer];
return processname;
}
該方法雖然稍顯複雜,但是思路可做參考:它巧妙地通過processid,獲取到該程序的路徑path,然後擷取路徑path的lastcomponent為其名稱,進而獲取到了程序名和id。
經過測試,該方法在osx10.15beta中也可以正常獲取到。
以上只是個人專案中所用總結,如有錯誤,懇請批評指正!如對您有幫助,點讚支援,謝謝!
如何獲取正在執行任務的列表
裝置,軟體版本 s60 1st edition s60 2nd edition and fp1,fp2,fp3 s60 3rd edition and fp1 series 80 2nd edition 詳細描述 描述symbian作業系統的應用程式框架提供了一組api用以獲得當前正在執行的任務的資...
正在執行的SQL
sql server select spid session id,ecid,database db name sp.dbid user nt username,status er.status,wait wait type,individual query substring qt.text,er...
終止正在執行的執行緒
很多人都說使用abort方法來終止執行緒,其實這種做法並不可取!如果你的執行緒正在操作臨界資源,很有可能會造成資源沒有正確釋放而出現死鎖問題。正確的做法應該是使用標記來終止執行緒的執行。下面我們來看具體的操作步驟。首先定義乙個 停止 訊號變數 view plaincopy to clipboardp...