我需要为主机上的给定 PID 运行此命令。
cmd = cat /proc/$PID/cgroup | grep -o -e "docker-.*.scope"
io.popen(cmd)
Run Code Online (Sandbox Code Playgroud)
当 PID 是一个容器时,这很好,但我偶尔会看到,
cat: /proc/12345/cgroup: No such file or directory
Run Code Online (Sandbox Code Playgroud)
因此,我执行以下操作:
f1 = io.open("/proc/" .. PID .. "/cgroup", "r+")
if (f1 == nil) then return end
local filename = "/proc/" .. PID .. "/cgroup"
local cmd = "test -f " .. filename .. " && cat " .. filename .. " grep -o -e "docker-.*.scope"
local f2 = io.popen(cmd)
Run Code Online (Sandbox Code Playgroud)
我仍然偶尔看到错误消息, cat: /proc/5678/cgroup: No such file or directory
请注意,我打开了 /proc/$PID/cgroup 并test -f检查了传递给 popen 的命令。
我的假设是,在proctest -f和之后的cat ...命令之间, 进程的 proc 条目消失了,因此 popen 命令失败。
上面的代码有什么问题吗?我只需要抑制此错误消息。抑制此错误消息的好方法是什么?
在 Lua 级别上你能做的不多,你只需要修改你的cat命令来重定向stderr到/dev/null你在终端上的 bash 中所做的:)
local cmd = [[cat /proc/$PID/cgroup 2>/dev/null | grep -o -e "docker-.*.scope"]]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |