如何设置 Linux 命令的时间限制
想要在 Linux 上运行命令而不占用太多资源吗?解决办法就是给它设定一个时间限制。
对于负责控制 Linux 服务器的系统管理员来说,资源管理是一项需要处理的重要任务。有时,Linux 命令会占用大量系统资源,需要停止。
幸运的是,您可以使用 timelimit 等实用程序来限制命令的运行时间。在本文中,我们将讨论为什么应该为命令添加时间限制以及如何使用 timelimit 和 timeout 等命令添加时间限制。
为什么要限制命令的运行时间?
有多种原因可能导致您必须在有时间限制的情况下运行命令。首先,您可能运行的是较旧的计算机或服务器,并且不希望系统在不需要的处理中浪费资源。
其次,有时限的任务(例如文件传输)会在一段时间后完成,但它们的进程不会立即停止。要限制程序占用额外的 CPU 时间和内存,您可以添加限制,以便在传输完成后停止该进程。
使用 timeout 命令添加限制
timeout 命令是许多 Linux 用户为命令添加时间限制的首选。由于此工具是 GNU Core Utilities 软件包的一部分,因此几乎每个 Linux 发行版上都预安装了它。
超时命令的基本语法是:
timeout limit command
...其中 limit 是命令应运行的时间量,command 是您要在时间限制下执行的 Linux 命令。
例如,如果您想使用 top 命令获取进程详细信息 10 秒:
timeout 10s top
top 命令是永无止境的,您必须使用 Ctrl + C 手动退出它。上述命令将运行top 10秒,一旦计时器到了,超时将停止其执行。请注意,超时采用秒作为默认时间单位,这意味着10和10s是相同的。
您还可以使用 m、h 和 d 表示分钟、小时、和天分别。
手动发送超时终止信号
默认情况下,超时命令发送 SIGTERM 作为终止信号。 SIGTERM 代表信号终止,它立即终止进程。
您还可以使用 -s 标志发送其他信号。例如,要发送 SIGKILL 信号:
timeout -s SIGKILL 10 top
也可以通过信号编号来指定信号。以下命令也将 SIGKILL 信号发送到 top 命令。
timeout -s 9 10 top
...其中 9 是 SIGKILL 的信号编号。
要获取所有可用信号的列表:
kill -l
有些命令即使添加时间限制后也不会完全停止。在这种情况下,使用默认超时命令添加终止信号可以解决该问题。
timeout -k 15 10 top
上述命令将首先运行top命令10秒,如果该命令没有停止,它将在15秒后向进程发送kill信号。
使用时间限制限制命令运行时间
与 timeout 命令不同,timelimit 不是 Linux 发行版上预安装的标准软件包之一。因此,您必须在系统上手动安装 timelimit。
要在基于 Debian 的发行版上安装:
sudo apt install timelimit
Arch 官方存储库中没有 Timelimit。但是,您可以使用 AUR 包管理器(例如 yay)来安装它。
sudo yay -S timelimit
要在 Fedora 上安装:
sudo dnf install timelimit
在 RHEL 和 CentOS 上:
sudo yum install timelimit
或者,如果您仍然无法在系统上安装该软件包,请从官方网站下载源代码并手动安装。
下载:时间限制
要使用 timelimit 运行 top 命令 10 秒:
timelimit -t10 top
Timelimit 采用多个参数,例如 warntime、warnsig、killtime 和 killsig。如果用户不提供这些参数,则采用默认值,即 warntime=3600 秒、warnsig=15、killtime=120 > 和 killsig=9。
管理 Linux 中命令的生命周期
如果您的 Linux 计算机资源有限,那么监视命令和控制进程就变得很重要。像超时和时间限制这样的实用程序是一个救星,因为它们允许您为命令添加时间限制。
与命令运行时一样,您也可以限制系统的屏幕时间。如果您是一位家长,不想让孩子在电脑前浪费不必要的时间,那么限制屏幕时间是最合适的选择。