【问题标题】:Timeout for a stuck process卡住进程超时
【发布时间】:2018-08-13 23:06:41
【问题描述】:

我正在循环一组文件的do ... while 中调用视频转换过程。

大部分时间它都按预期工作,但有时该进程会挂在文件上并且在我将其杀死之前不会继续。 (所以它并不是没有反应 - 只是没用!)

它仍在发送到 stdout 和 stderr,在那里我可以看到它正在尝试一遍又一遍地读取相同的索引。我还可以看到它没有将任何输出写入目标文件(因此它没有做任何有用的事情)。

我可以:

  • 监控 stdout 和/或 stderr 是否有重复项,如果重复执行多次则退出进程;或

  • 监控目标文件,如果超时后不存在则退出进程;或

  • 如果在超时后未能完成,请退出进程?

【问题讨论】:

  • 第三个问题(超时后退出进程)这里有答案:stackoverflow.com/questions/5161193/…
  • 第二个问题(检查文件并在一段时间后退出)可以用一个简单的for/while + sleep + [ -f ... ] + kill来完成
  • 谢谢。这两个看起来对我来说都是有用的东西。

标签: bash timeout terminate


【解决方案1】:

如果视频转换过程是由您开发的,那么最好的解决方案是修复无限循环问题。从错误处理的角度来看,或者如果进程是第 3 方,那么您可以将输出重定向到文件,然后定期检查文件中日志中的特定错误消息,然后将其终止。如果该进程预计在特定时间范围内处理文件,那么如果转换未在指定时间范围内完成,您可以终止该进程。

【讨论】:

  • 这是第三者的,所以我必须解决这个问题。我想问题是我无法掌握如何——如果进程没有完成——我可以监控并杀死它,但我想我需要看看stackoverflow.com/users/1913824/andrea-corbellini提供的内容,看看我是否可以让它工作。
  • 您可以使用“SECONDS”变量来测量超时。例子在这里。 stackoverflow.com/questions/5152858/…
  • 谢谢。这可以很容易地显示我不理解的内容:如果我 1. 开始时间记录,2. 做某事,3. 停止记录(并计算间隔),我该怎么做 3. 如果 2. 从不完成了吗?
  • 在后台运行进程。
  • 啊!知道了!真的很简单。感谢您的耐心等待。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多