Linux超时命令使用实际时间吗?二进制文件损坏?

Linux超时命令使用实际时间吗?二进制文件损坏?

我想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没有--versionor --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.

相关内容