我想發出一個信號,一個過程中,我開始在Linux和Mac OS X. system
或system2
然而,通過它們的文檔會我無法找到任何方法來找出新啓動的進程的PID。如何查找R中的system或system2開始的子進程的pid?
0
A
回答
1
原來,這並不像我想象的那麼簡單。我正在執行的命令啓動了其他進程,並且我需要殺死的命令進一步進入進程樹。所以即使系統/系統給了我啓動過程的PID,它也不會幫助我。
所以我最後寫這個功能,我在Mac OS X和RedHat Linux上進行測試,以獲取正在運行的進程的data.table:
library(data.table)
library(stringr)
# Returns a process list on a Linux or Mac OS X system by calling 'ps' command and
# parsing its output.
processList <- function() {
# Execute ps
ps = robust.system("ps auxww")
if (ps$exitStatus != 0) {
print(ps)
return(NA)
}
# Turn into data.table
ps$stdout = str_trim(ps$stdout)
ncols = str_count(ps$stdout[1], "[ ]+") + 1
procs = str_split_fixed(ps$stdout, "[ ]+", ncols)
ps = as.data.table(procs[2:nrow(procs),])
setnames(ps, 1:ncols, procs[1,])
rm(ncols, procs)
# Convert relevant columns to friendlier data types.
# Rename Mac OS X style "TT" to "TTY" and "STARTED" to "START" as well.
if ("PID" %chin% colnames(ps)) {
ps[,PID:=as.integer(as.character(PID))]
}
if ("%CPU" %chin% colnames(ps)) {
setnames(ps, "%CPU", "percentCPU")
ps[,percentCPU:=as.numeric(percentCPU)]
}
if ("%MEM" %chin% colnames(ps)) {
setnames(ps, "%MEM", "percentMEM")
ps[,percentMEM:=as.numeric(percentMEM)]
}
if ("TT" %chin% colnames(ps)) {
setnames(ps, "TT", "TTY")
}
if ("STARTED" %chin% colnames(ps)) {
setnames(ps, "STARTED", "START")
}
if ("COMMAND" %chin% colnames(ps)) {
ps[,COMMAND:=as.character(COMMAND)]
}
return(ps)
}
請注意,它使用robust.system,所以你我也需要這個。
2
相關問題
- 1. 如何獲取從Bash中的eval開始的進程的PID?
- 2. 父進程如何找到導致其子進程死亡的進程的PID?
- 3. 如何找到孤兒進程的pid
- 4. 查找守護進程的PID?
- 5. 如何獲取子進程的PID?
- 6. 如何獲得在c程序中使用system()啓動的進程的PID
- 7. 如何使用子進程check_output獲取子進程的PID
- 8. 獲得子進程的PID
- 9. 在不使用popen()或system()的情況下通過名稱查找進程的PID
- 10. 如何查找「public static void main」或程序的開始?
- 11. 如何在perl中的父進程中獲取死亡的子進程的PID?
- 12. 查找shell腳本中調用的每個進程的pid
- 13. 如何查找C中進程的子進程數?
- 14. Python - 終止子進程或PID?
- 15. 如何從java中的pid中找到進程名稱?
- 16. 如何獲得gjs中的進程pid?
- 17. 通過PID查找進程名稱
- 18. 如何從pid文件中查殺時殺死子進程
- 19. 如何找到在java中啓動的進程的進程ID(pid)?
- 20. busybox初始化進程錯誤的PID
- 21. 如何通過PID查找應用程序名稱(進程ID)
- 22. Python:給出pid獲取用戶進程的開始時間
- 23. 如何殺死使用R時通過system()啓動的進程?
- 24. 如何殺死一個PID在PID文件中的進程?
- 25. 查找進程的PID在啓動的時候在Windows
- 26. 查找鎖定文件的進程的PID
- 27. erlang中的事件管理器進程。命名進程或Pid?
- 28. 獲取遞歸子進程的pid
- 29. 如何查找從r腳本中的datetime開始的月份和年份
- 30. 從子進程獲取PID
什麼是您的操作系統? – Thomas
Linux/Mac OS X – asieira
Unfornate這已被標記爲重複項,因爲與此相同的問題僅涵蓋Windows系統的實際解決方案。我的問題,我結束了自己提供的答案,適用於Linux和Mac OS X. – asieira