2

systemLinux および Mac OS X で、またはsystem2Linux および Mac OS X 上で開始したプロセスにシグナルを送信したいと考えています。

4

2 に答える 2

4

Windows の場合 (おそらく他の場所でも):

system("tasklist", intern=TRUE)

各プロセスの PID を取得するために解析できる文字ベクトルを返します。

より詳細な回答は、ここここにあります。

于 2013-07-05T15:22:34.287 に答える
1

想像していたほど単純ではなかったことがわかりました。私が実行していたコマンドは他のプロセスを開始しましたが、強制終了する必要のあるプロセスはプロセス ツリーのさらに下にありました。したがって、システム/システムが開始したプロセスの PID を教えてくれたとしても、それは役に立ちません。

そのため、実行中のプロセスを data.table として取得するために、Mac OS X と RedHat Linux でテストしたこの関数を作成することになりました。

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を使用しているため、それも必要になることに注意してください。

于 2013-07-05T17:48:35.530 に答える