来自 R system("pgrep -f ...") 调用的额外进程 ID
Extra process id from R system("pgrep -f ...") call
当从 R 会话调用 system
函数并传递 pgrep
命令以列出与特定名称匹配的进程 ID 时,system
调用的结果产生一个额外的 pid 与相同的 pgrep
命令直接用在shell.
这可能是在 system
调用期间创建额外进程的问题,该进程也被 pgrep
捕获并返回到 R 会话。
问题是如何避免这个问题并找到与名称匹配的所有进程 ID?
要重现启动任何进程,我将使用 gedit
进程(ubuntu 记事本应用程序)。
运行 来自 R:
system("pgrep -f gedit", intern = TRUE)
# [1] "4898" "5014"
运行 来自 shell:
pgrep -f gedit
# 4898
如果额外的 pid 总是最后一个返回我可以使用 x[-length(x)]
.
您可以通过在对 pgrep
的调用中删除 -f
参数来获得所需的输出。这是我从我的电脑上得到的:
system("pgrep gedit", intern = TRUE)
#[1] "2888"
system("pgrep -f gedit", intern = TRUE)
#[1] "2888" "5839"
当从 R 会话调用 system
函数并传递 pgrep
命令以列出与特定名称匹配的进程 ID 时,system
调用的结果产生一个额外的 pid 与相同的 pgrep
命令直接用在shell.
这可能是在 system
调用期间创建额外进程的问题,该进程也被 pgrep
捕获并返回到 R 会话。
问题是如何避免这个问题并找到与名称匹配的所有进程 ID?
要重现启动任何进程,我将使用 gedit
进程(ubuntu 记事本应用程序)。
运行 来自 R:
system("pgrep -f gedit", intern = TRUE)
# [1] "4898" "5014"
运行 来自 shell:
pgrep -f gedit
# 4898
如果额外的 pid 总是最后一个返回我可以使用 x[-length(x)]
.
您可以通过在对 pgrep
的调用中删除 -f
参数来获得所需的输出。这是我从我的电脑上得到的:
system("pgrep gedit", intern = TRUE)
#[1] "2888"
system("pgrep -f gedit", intern = TRUE)
#[1] "2888" "5839"