gpt4 book ai didi

linux - 如何杀死一段时间内没有输出的进程

转载 作者:行者123 更新时间:2023-12-03 03:11:45 25 4
gpt4 key购买 nike

我编写了一个程序,该程序应该运行很长时间,并将进度输出到 stdout,但是,在某些情况下它开始挂起,最简单的方法是重新启动它。

我的问题是:有没有办法做一些事情,只有在特定秒数内没有输出时才会终止进程?

我开始思考这个问题,唯一想到的就是这样的:

./application > output.log &
tail -f output.log

然后创建脚本,该脚本将查看 output.log 上最后一次修改的日期和时间并重新启动整个过程。

但它看起来非常乏味,如果有一个现有的命令,我不想经历这一切。

最佳答案

据我所知,没有一个标准实用程序可以做到这一点,但对于单行代码来说,一个好的开始是:

timeout=10; if [ -z "`find output.log -newermt @$[$(date +%s)-${timeout}]`" ]; then killall -TERM application; fi

至少,这将避免编写更复杂的脚本的繁琐部分。

一些提示:

  • 使用find实用程序将output.log文件的上次修改日期与时间引用进行比较。
  • date 实用程序返回时间引用,作为自 EPOCH (1970-01-01 UTC) 以来的当前时间(以秒为单位+%s)。
  • 使用 bash $[] 操作减去 $timeout 值(示例中为 10 秒)
  • 如果上述 find 没有返回任何输出,则表明该文件在超过 10 秒的时间内未发生更改。这将在 if 条件中触发 true,并执行 killall 命令。

您还可以使用以下方法为其设置别名:

alias kill_application='timeout=10; if [ -z "`find output.log -newermt @$[$(date +%s)-${timeout}]`" ]; then killall -TERM application; fi';

然后只要你想使用它,只需发出命令kill_application

如果您想在无需人工干预的情况下自动重新启动应用程序,您可以安装一个 crontab 条目以每分钟左右运行一次,并在 killall 之后发出应用程序重新启动命令> (可能您可能还想将 -TERM 更改为 -KILL,以防应用程序对可处理信号无响应)。

关于linux - 如何杀死一段时间内没有输出的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com