如何自动终止脚本内命令的无限执行?

Posted

技术标签:

【中文标题】如何自动终止脚本内命令的无限执行?【英文标题】:How to terminate infinite execution of command inside script automatically? 【发布时间】:2019-09-10 04:45:19 【问题描述】:

我的 bash 脚本中有一个可以启动无限执行的命令。当它发生时,我想终止该命令的进程并继续执行脚本。

我用谷歌搜索并试图找到重复的答案 - 没有结果:(

"myProgram" 是 bash 脚本中的一个 C 语言简单程序,可将 "*" 打印到 "stars.txt" 文件。 它使用命令gcc myProgram .cpp -o myProgram 编译。 “myProgram”可以开始无限执行,我想在它发生时终止它。

...
./myProgram 2>> log.txt > stars.txt
...

请帮助我解决问题或将我指向有助于获得答案的材料。如果您需要任何其他信息,请询问,我会尽快回复:)

【问题讨论】:

为什么不在程序中处理这个问题? @oguzismail,根据我解决的任务,我无法编辑该程序的代码。 您可以使用计时器并在 shell 脚本中设置超时值。可以分享一下你调用c程序的代码的sn-p吗? sn-p 代码的最小部分是内部问题,这是一个很好的建议,谢谢:) 根据您的建议给出的答案较低。 can start infinite execution and I'd like to terminate it when it happens. 什么时候会发生什么?终止程序的具体条件是什么? 【参考方案1】:

您可以使用timeout shell 命令退出命令并开始执行下一行,以防命令花费的时间超过超时值中指定的时间。

...
timeout 100 ./myProgram 2>> log.txt > stars.txt
...

在上述程序中,如果超过 100 秒,您的 ./myProgram 将退出。

【讨论】:

这个答案将帮助 OP 在超过 100 秒时终止他们的程序。但是,我们(很可能,包括 OP)并不清楚终止条件是什么。 (“可以开始无限执行,我想在它发生时终止它。”)它可能是(1)您解释的时间,(2)产生的标准输出的 X kb,(3)或任何其他事件。只是在此处添加此评论,因为问题太宽泛,并且此答案正确处理了对该问题的一种解释。 即使myProgram 在超时时间内正常终止,此命令也能正常工作

以上是关于如何自动终止脚本内命令的无限执行?的主要内容,如果未能解决你的问题,请参考以下文章

终止无限期运行的子命令 - inotify

Linux shell tail -f如何自动终止

使gdb在成功终止时自动退出?

shell 脚本 - 在退出无限循环之前完成迭代

CentOS7开机自动执行命令

在linux后台执行脚本