如何在tcl中查看按名称运行的进程

时间:2015-09-17 11:16:55

标签: process tcl

我想通过tcl中名称给出的进程来使用pidof。我使用了[exec pidof $proc_name ],但它总是返回错误:子进程异常退出

我在某处exec读取总是将非零返回视为错误,因为pidof返回进程ID号。有谁知道是否有解决方法?提前谢谢!

我想使用pidof是我想查看该进程是否正在运行,否则我将重启该进程。

2 个答案:

答案 0 :(得分:0)

问题在于pidof执行strange things with exit codes

  

退出状态

     
      
  1. 找到至少一个带有请求名称的程序。
  2.   
  3. 找不到包含所请求名称的程序。
  4.   

这与exec严重交互,后者将非零退出代码视为表示它应该告诉Tcl的其余部分是否存在错误。

处理这个问题的最简单方法是使用一些额外的shell脚本包装器。为方便起见,让我们将其隐藏在程序中:

proc pidof {name} {
    exec /bin/bash -c "pidof '$name'; exit \$(( \$? - 1 ))"
}

所有这一切都是在退出Tcl之前从退出代码中减去1。

(您也可以使用the exec manual中描述的技术解决此问题,但我认为这次修复bash方面更简单。)

答案 1 :(得分:0)

我遇到了这个并最终导致了我运行的旧Linux环境的一些问题(没有bash和退出代码处理与busybox有点不同)。

我在任何地方都可以使用的解决方案与一些建议相似:

proc pidof {name} {
  catch {exec -ignorestderr -- pidof $name} pid
  if {[string is entier -strict $pid]} {
    return $pid 
  }
}