如何在linux上使用timeout命令

好的,这足够用电脑了。您可以给进程时间限制,通过timeoutcommand设置它们可以运行的最长时间。这里有一个教程来限制用这个命令运行程序。...

好的,这足够用电脑了。您可以给进程时间限制,通过timeoutcommand设置它们可以运行的最长时间。这里有一个教程来限制用这个命令运行程序。

超时对你有什么好处?

timeout命令允许您设置程序运行的时间长度限制。但你为什么要这么做?

一种情况是,您确切地知道一个进程要运行多长时间。一个常见的使用案例是对日志或数据捕获程序进行超时控制,这样日志文件就不会无情地占用硬盘空间。

另一种情况是,您不知道一个进程要运行多长时间,但是您知道您不希望它无限期地运行。您可能有这样一个习惯:设置正在运行的进程,最小化终端窗口,然后忘记它们。

有些程序-即使是简单的实用程序也会生成网络流量,其级别会影响网络性能。或者它们会占用目标设备上的资源,降低其性能。(平,我看着你。)当你离开电脑时,让这些程序长时间运行是不好的做法。

超时是GNU核心Utils的一部分,因此Linux和类似Unix的操作系统(如macOS)都内置了超时。没有什么可安装的,你可以直接使用它。

超时入门

下面是一个简单的例子。例如,使用默认的命令行选项,ping命令将一直运行,直到您按Ctrl+C停止它为止。如果您不中断它,它将继续运行。

ping 192.168.4.28

如何在linux上使用timeout命令

通过使用timeout,我们可以确保ping不会不停地运行,占用网络带宽并纠缠正在ping的任何设备。

下一个命令使用超时时间限制ping。我们给ping留出15秒的运行时间。

timeout 15 ping 192.168.4.28

15秒后,超时终止ping会话,返回命令行提示符。

如何在linux上使用timeout命令

与其他时间单位一起使用超时

请注意,我们不必在15后面添加“s”。超时假定值以秒为单位。你可以加一个“s”,但其实没什么区别。

要使用以分钟、小时或天为单位的时间值,请添加“m”、“h”或“d”

要使ping运行三分钟,请使用以下命令:

timeout 3m ping 192.168.4.28

ping将运行三分钟,然后超时进入并停止ping会话。

如何在linux上使用timeout命令

使用超时限制数据捕获

一些数据捕获文件可能会迅速变大。为了防止这些文件变得笨拙甚至大小有问题,请限制捕获程序允许运行的时间。

在这个例子中,我们使用tcpdump,一个网络流量捕获工具。在本文研究的测试机器上,tcpdump已经安装在ubuntulinux和fedoralinux中。它必须通过以下命令安装在Manjaro Linux和Arch Linux上:

sudo pacman -Syu tcpdump

如何在linux上使用timeout命令

我们可以使用tcpdump的默认选项运行10秒,并将其输出重定向到一个名为捕获.txt使用以下命令:

timeout 10 sudo tcpdump > capture.txt

如何在linux上使用timeout命令

(tcpdump有自己的选项将捕获的网络流量保存到文件中。这是一个快速的攻击,因为我们讨论的是超时,而不是tcpdump。)

tcpdump开始捕获网络流量,我们等待10秒。10秒来来去去,tcpdump仍在运行捕获.txt规模仍在增长。要停止tcpdump需要一个快速的Ctrl+C。

正在检查捕获.txtls显示它在几秒钟内增长到209K。那个文件增长很快!

ls -lh capture.txt

如何在linux上使用timeout命令

发生什么事了?为什么超时不停止tcpdump?

这都和信号有关。

发出正确的信号

当timeout想要停止一个程序时,它发送SIGTERM信号。这会礼貌地要求程序终止。有些程序可能会选择忽略SIGTERM信号。当这种情况发生时,我们需要告诉timeout更有力一点。

我们可以通过请求timeout来发送SIGKILL信号。

SIGKILL信号不能被“捕获、阻止或忽略”——它总是通过。西格尔没有礼貌地要求程序停止。西格基尔拿着秒表和一个盒子躲在角落里。

我们可以使用-s(signal)选项告诉timeout发送SIGKILL信号。

timeout -s SIGKILL 10 sudo tcpdump > capture.txt

如何在linux上使用timeout命令

这一次,只要过了10秒,tcpdump就会停止。

如何在linux上使用timeout命令

先礼貌地问

我们可以请求timeout尝试停止使用SIGTERM的程序,并且仅在SIGTERM不工作时发送SIGKILL。

为此,我们使用-k(kill after)选项。k选项需要一个时间值作为参数。

在这个命令中,我们请求timeout让dmesg运行30秒,然后用SIGTERM信号终止它。如果40秒后dmesg仍在运行,则表示忽略了SIGTERM,超时应发送SIGKILL以完成作业。

dmesg是一个实用工具,可以监视内核环缓冲区消息并在终端窗口中显示它们。

timeout -k 40 30 dmseg -w

如何在linux上使用timeout命令

dmesg运行30秒,收到SIGTERM信号时停止。

如何在linux上使用timeout命令

我们知道并不是SIGKILL阻止了dmesg,因为SIGKILL总是在终端窗口留下一个单词的讣告:“被杀了。”这种情况并没有发生。

检索程序的退出代码

行为良好的程序在终止时将值传递回shell。这被称为退出代码。通常,这用于告诉shell(或启动程序的任何进程)程序在运行时是否遇到问题。

timeout提供了它自己的退出代码,但是我们可能不关心这个。我们可能对超时控制的进程的退出代码更感兴趣。

此命令允许ping运行5秒钟。它正在ping一台名为Nostromo的计算机,它位于用于研究本文的测试网络上。

timeout 5 ping Nostromo.local

如何在linux上使用timeout命令

命令运行5秒,超时终止。然后我们可以使用以下命令检查退出代码:

echo $?

如何在linux上使用timeout命令

退出代码是124。这是timeout用于指示程序已使用SIGTERM终止的值。如果SIGKILL终止程序,退出代码是137。

如果我们用Ctrl+C中断程序,超时的退出代码是零。

timeout 5 ping Nostromo.local echo $?

如何在linux上使用timeout命令

如果程序的执行在timeout终止之前结束,timeout可以将退出代码从程序传递回shell。

要做到这一点,程序必须自动停止(换句话说,它不会因超时而终止),我们必须使用--preserve status选项。

如果使用值为5的-c(count)选项,ping只会发出5个请求。如果我们给超时一分钟的持续时间,ping肯定会自动终止。然后我们可以使用echo检查退出值。

timeout --preserve-status 1m ping -c 5 Nostromo.local echo $?

如何在linux上使用timeout命令

ping完成五个ping请求并终止。退出代码为零。

为了验证退出代码是否来自ping,让我们强制ping生成一个不同的退出代码。如果我们尝试将ping请求发送到一个不存在的IP地址,ping将失败并返回一个错误退出代码。然后我们可以使用echo检查退出代码是否为非零。

timeout --preserve-status 1m ping -c 5 NotHere.local echo $?

如何在linux上使用timeout命令

ping命令显然无法到达不存在的设备,因此它会报告错误并关闭。退出密码是2。这是ping用于一般错误的退出代码。

制定基本规则

超时就是为运行程序提供一些边界。如果存在日志文件溢出硬盘驱动器或忘记网络工具运行的危险,请将其包装为超时并让计算机自行调节。

  • 发表于 2021-04-03 12:23
  • 阅读 ( 243 )
  • 分类:互联网

你可能感兴趣的文章

如何编译自己的linux内核

... 在GRUB#U HIDDENŠU TIMEOUT和GRUBŠU HIDDENŠTIMEOUTŠ安静线前放置一个Š标志。之后,通过运行以下命令保存这些更改: ...

  • 发布于 2021-03-15 10:33
  • 阅读 ( 156 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 307 )

如何用ukuu轻松升级ubuntu的linux内核

... 进入文件后,在GRUB\u HIDDEN\u TIMEOUT和GRUB\u HIDDEN\u TIMEOUT\u QUIET条目前面添加一个#。接下来,按Ctrl+X保存更改。但是,要使这些更改真正起作用,您需要输入以下命令: ...

  • 发布于 2021-03-16 09:57
  • 阅读 ( 328 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 284 )

如何在linux中添加用户

想在Linux系统上添加用户但不知道如何添加?在Linux上使用命令行界面管理用户无疑是一项复杂的工作。而对于初学者来说,即使添加新用户也是一场噩梦。 ...

  • 发布于 2021-03-26 23:29
  • 阅读 ( 334 )

如何在linux终端中查看和更改引导序列

... BootCurrent: 0000Timeout: 2 secondsBootOrder: 0000,0004,0005,0003Boot0000* ubuntuHD(...)/File(\EFI\UBUNTU\SHIMX64.EFI)Boot0003* Hard DriveBBS(...)Boot0004* UEFI: JetFlashTranscend 32GB 1100 ...Boot0005* UEFI: JetFlashTranscend 32GB 1100, Part...

  • 发布于 2021-03-27 06:23
  • 阅读 ( 202 )

终极树莓皮命令备忘单

...rame to filename --verbose, -vVerbose debugging information during run--timeout, -tSet a time to wait before capturing an image.--encoding, -eEncoding to use for output file - jpg, gif, bmp, or pngRaspi Camera VideoraspividCommand to take a video using attached camera, modify with arguments...

  • 发布于 2021-03-30 18:59
  • 阅读 ( 245 )

linux下如何使用rclone备份google驱动

...; /usr/bin/rclone copy --update --verbose --transfers 30 --checkers 8 --contimeout 60s --timeout 300s --retries 3 --low-level-retries 10 --stats 1s "/home/dave/Documents" "google-drive:LinuxDocs" 以下是参数的含义: 复制:将文件从本地计算机复制到远程存储,跳过已存在...

  • 发布于 2021-04-02 18:51
  • 阅读 ( 172 )

如何在linux上使用端口敲打(以及为什么不应该)

...更多端口。出于我们的目的,我们将坚持默认值。 seq\ u timeout:某人必须访问端口以触发其打开或关闭的时间段。 命令:触发打开或关闭操作时发送到iptables防火墙的命令。这些命令要么将规则添加到防火墙(打开端口),要么...

  • 发布于 2021-04-03 02:18
  • 阅读 ( 153 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 264 )
年糕乖不乖
年糕乖不乖

0 篇文章

相关推荐