我想通过tcl中名称给出的进程来使用pidof。我使用了[exec pidof $proc_name ]
,但它总是返回错误:子进程异常退出。
我在某处exec
读取总是将非零返回视为错误,因为pidof返回进程ID号。有谁知道是否有解决方法?提前谢谢!
我想使用pidof是我想查看该进程是否正在运行,否则我将重启该进程。
答案 0 :(得分:0)
问题在于pidof
执行strange things with exit codes:
退出状态
- 找到至少一个带有请求名称的程序。
- 找不到包含所请求名称的程序。
醇>
这与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
}
}