当前位置: 首页 > 面试题库 >

限制程序在Linux中运行的时间

车胤运
2023-03-14
问题内容

在Linux中,我想运行一个程序,但只能运行有限的时间,例如1秒。如果程序超出此运行时间,我想终止进程并显示错误消息。


问题答案:

StackOverflow不允许我删除答案,因为它已被接受。由于它在列表顶部,下面有一个更好的解决方案,因此它获得了否决票。如果您使用的是GNU系统,请timeout按照@wRAR的建议使用代替。因此,希望您停止投票,这是它的工作方式:

timeout 1s ./myProgram

您可以使用smhd为秒(如果省略默认值),分钟,小时或天。这里的一个有趣的功能是,如果不响应原始SIGTERM,则可以指定另一个选项-k 30s(在1s上述选项之前),以便在30秒后用SIGKILL杀死它。

一个非常有用的工具。现在向下滚动并向上投票@wRAR的答案。

为了后代,这是我最初的(次等的)建议,如果有人使用它可能仍然是。

一个简单的bash脚本应该可以为您做到这一点

./myProgram &
sleep 1
kill $! 2>/dev/null && echo "myProgram didn't finish"

那应该做到的。

$!扩展到最后一个后台进程(通过使用&),并且kill如果没有杀死任何进程,则kill返回false,因此仅在实际上杀死了某些东西的情况下执行echo。

2>/dev/null 重定向kill的stderr,否则它将打印出一些内容,告诉您它无法终止该进程。

您可能还想添加一个-KILL或任何您想用来摆脱进程的信号。

编辑(
Ephemenent指出),如果您的程序完成了,而其他进程抢走了pid,它就会被杀死,这是一场竞赛。为了降低发生这种情况的可能性,您可以对SIGCHLD做出反应,而不要尝试杀死它。仍然有机会消除错误的过程,但是它非常遥远。

trapped=""
trap 'trapped=yes' SIGCHLD
./myProgram &
sleep 1
[ -z "$trapped" ] && kill $! 2>/dev/null && echo '...'


 类似资料:
  • 问题内容: 我有要处理的网址列表,但我想一次运行最大数量的goroutine。例如,如果我有30个网址,那么我只希望10个goroutine并行工作。 我对此的尝试如下: 我的理解是,如果创建一个大小为并行的缓冲通道,那么该代码将阻塞,直到我读取结果通道为止,这将取消阻塞我的代码并允许生成另一个goroutine。但是,此代码似乎在处理完所有网址后不会阻塞。有人可以向我解释如何使用通道限制运行的g

  • 问题内容: 我有一个返回String的方法,是否有可能在一段时间后超出该阈值以返回该特定字符串? 问题答案: 该番石榴库有一个非常好的,可以让你做到这一点,就会向由接口定义的任何方法。它可以为具有“内置”超时的对象生成代理。

  • 2020-02-27 16:36:12.159 313 59-31359/com.gic.spade.android e/AndroidRuntime:致命异常:main process:com.gic.spade.android,PID:31359 java.lang.runtimeException:无法创建应用程序com.gic.spade.android.application.colle

  • 问题内容: 嘿,我一直在写一个程序(一种类似于电子书的查看类东西),它从可执行文件所在的文件夹中的一个文件夹中加载文本文件。这给我带来了一个问题,因为例如,如果我使用“ ./folder/folder/program”命令从另一个目录运行该程序,由于工作目录不正确,我的程序将找不到文本。我没有绝对目录,因为我希望该程序具有可移植性。有什么方法可以获取可执行文件正在运行的确切目录,即使它是从其他目录

  • 问题内容: 我在Java中有一个JDBC MySQL连接。我的程序可以很好地执行简单的查询。 如果我运行同一程序超过10个小时并执行查询,则会收到以下MySQL异常: 我没有在任何地方使用方法。我创建了数据库连接,并永远打开它并始终执行查询。我没有地方明确提到连接超时。我无法确定问题所在。 这是我用于数据库连接的代码: 是什么导致该异常? 问题答案: 您必须在配置文件中进行更改或增加数据库的超时时

  • 我想看看我的应用程序是否可以在即时应用程序中完成。我的应用程序是基于从我的船上获取NFC发送的温度。 不幸的是,android开发者网站的常见问题表示,只有以下几个权限可用。 https://developer.android.com/topic/instant-apps/faqs.html 这意味着NFC权限是不可能的? 提前感谢您的回答