我想timeout
在一小时后杀死一个脚本。
我在 Debian 上运行timeout 1h <script>
并且它很简单。
在我的 arch Linux 机器上,情况有所不同。在尝试了一些东西之后,我想我发现问题是我的超时二进制文件不使用实际的系统时间,而是使用 CPU 时间。我想要超时的脚本wget
显然不会使用大量 CPU 时间。命令timeout 3600 wget
在终止之前最多可以运行半天。
timeout 5 dd if=/dev/zero of=/dev/null
但是在 6.6 秒时钟时间(5.1 秒 CPU 时间)后被杀死。
我无法找到timeout
二进制文件(澄清:不是在我的系统上,我的意思是在网络上下载),每个来源基本上都说“它带有linux”。我的timeout
没有--version
or --help
,不管它是什么,它只是说:
Usage:
timeout [-t timelimit] [-m memlimit] [-x hertz] command [arguments ...]
Died at /usr/local/bin/timeout line 29
我是否有一个混乱的二进制文件?根据man timeout
,版本和帮助选项都应该可用。既然timeout
是linux核心的一部分,我该如何重新安装呢?
答案1
回顾最初的帖子及其评论,听起来这个问题与存在的超时二进制文件的两个不同副本有关。一个在/usr/local/bin
,另一个在/usr/bin
。
将其中一个移出到您的 shell 不会查找二进制文件的地方,应该有助于确定哪个是哪个。假设/usr/bin
更可能用于系统二进制文件,那么其中的一个/usr/local/bin
可能是我们的问题 - 尽管我可能是错的。
您可以在 Debian、Ubuntu 及其衍生版本上查询您的软件包管理器:
$ dpkg -S /usr/bin/timeout
coreutils: /usr/bin/timeout
或者 CentOS、RedHat、Fedora,...:
$ yum provides /usr/bin/timeout
...
coreutils-8.22-24.el7.x86_64 : A set of basic GNU tools commonly used in shell scripts
Repo : base
Matched from:
Filename : /usr/bin/timeout
然而你的包管理器很可能对/usr/local/bin/timeout
.