好的,这足够用电脑了。您可以给进程时间限制,通过timeoutcommand设置它们可以运行的最长时间。这里有一个教程来限制用这个命令运行程序。
timeout命令允许您设置程序运行的时间长度限制。但你为什么要这么做?
一种情况是,您确切地知道一个进程要运行多长时间。一个常见的使用案例是对日志或数据捕获程序进行超时控制,这样日志文件就不会无情地占用硬盘空间。
另一种情况是,您不知道一个进程要运行多长时间,但是您知道您不希望它无限期地运行。您可能有这样一个习惯:设置正在运行的进程,最小化终端窗口,然后忘记它们。
有些程序-即使是简单的实用程序也会生成网络流量,其级别会影响网络性能。或者它们会占用目标设备上的资源,降低其性能。(平,我看着你。)当你离开电脑时,让这些程序长时间运行是不好的做法。
超时是GNU核心Utils的一部分,因此Linux和类似Unix的操作系统(如macOS)都内置了超时。没有什么可安装的,你可以直接使用它。
下面是一个简单的例子。例如,使用默认的命令行选项,ping命令将一直运行,直到您按Ctrl+C停止它为止。如果您不中断它,它将继续运行。
ping 192.168.4.28通过使用timeout,我们可以确保ping不会不停地运行,占用网络带宽并纠缠正在ping的任何设备。
下一个命令使用超时时间限制ping。我们给ping留出15秒的运行时间。
timeout 15 ping 192.168.4.2815秒后,超时终止ping会话,返回命令行提示符。
请注意,我们不必在15后面添加“s”。超时假定值以秒为单位。你可以加一个“s”,但其实没什么区别。
要使用以分钟、小时或天为单位的时间值,请添加“m”、“h”或“d”
要使ping运行三分钟,请使用以下命令:
timeout 3m ping 192.168.4.28ping将运行三分钟,然后超时进入并停止ping会话。
一些数据捕获文件可能会迅速变大。为了防止这些文件变得笨拙甚至大小有问题,请限制捕获程序允许运行的时间。
在这个例子中,我们使用tcpdump,一个网络流量捕获工具。在本文研究的测试机器上,tcpdump已经安装在ubuntulinux和fedoralinux中。它必须通过以下命令安装在Manjaro Linux和Arch Linux上:
sudo pacman -Syu tcpdump我们可以使用tcpdump的默认选项运行10秒,并将其输出重定向到一个名为捕获.txt使用以下命令:
timeout 10 sudo tcpdump > capture.txt(tcpdump有自己的选项将捕获的网络流量保存到文件中。这是一个快速的攻击,因为我们讨论的是超时,而不是tcpdump。)
tcpdump开始捕获网络流量,我们等待10秒。10秒来来去去,tcpdump仍在运行捕获.txt规模仍在增长。要停止tcpdump需要一个快速的Ctrl+C。
正在检查捕获.txtls显示它在几秒钟内增长到209K。那个文件增长很快!
ls -lh capture.txt发生什么事了?为什么超时不停止tcpdump?
这都和信号有关。
当timeout想要停止一个程序时,它发送SIGTERM信号。这会礼貌地要求程序终止。有些程序可能会选择忽略SIGTERM信号。当这种情况发生时,我们需要告诉timeout更有力一点。
我们可以通过请求timeout来发送SIGKILL信号。
SIGKILL信号不能被“捕获、阻止或忽略”——它总是通过。西格尔没有礼貌地要求程序停止。西格基尔拿着秒表和一个盒子躲在角落里。
我们可以使用-s(signal)选项告诉timeout发送SIGKILL信号。
timeout -s SIGKILL 10 sudo tcpdump > capture.txt这一次,只要过了10秒,tcpdump就会停止。
我们可以请求timeout尝试停止使用SIGTERM的程序,并且仅在SIGTERM不工作时发送SIGKILL。
为此,我们使用-k(kill after)选项。k选项需要一个时间值作为参数。
在这个命令中,我们请求timeout让dmesg运行30秒,然后用SIGTERM信号终止它。如果40秒后dmesg仍在运行,则表示忽略了SIGTERM,超时应发送SIGKILL以完成作业。
dmesg是一个实用工具,可以监视内核环缓冲区消息并在终端窗口中显示它们。
timeout -k 40 30 dmseg -wdmesg运行30秒,收到SIGTERM信号时停止。
我们知道并不是SIGKILL阻止了dmesg,因为SIGKILL总是在终端窗口留下一个单词的讣告:“被杀了。”这种情况并没有发生。
行为良好的程序在终止时将值传递回shell。这被称为退出代码。通常,这用于告诉shell(或启动程序的任何进程)程序在运行时是否遇到问题。
timeout提供了它自己的退出代码,但是我们可能不关心这个。我们可能对超时控制的进程的退出代码更感兴趣。
此命令允许ping运行5秒钟。它正在ping一台名为Nostromo的计算机,它位于用于研究本文的测试网络上。
timeout 5 ping Nostromo.local命令运行5秒,超时终止。然后我们可以使用以下命令检查退出代码:
echo $?退出代码是124。这是timeout用于指示程序已使用SIGTERM终止的值。如果SIGKILL终止程序,退出代码是137。
如果我们用Ctrl+C中断程序,超时的退出代码是零。
timeout 5 ping Nostromo.local echo $?如果程序的执行在timeout终止之前结束,timeout可以将退出代码从程序传递回shell。
要做到这一点,程序必须自动停止(换句话说,它不会因超时而终止),我们必须使用--preserve status选项。
如果使用值为5的-c(count)选项,ping只会发出5个请求。如果我们给超时一分钟的持续时间,ping肯定会自动终止。然后我们可以使用echo检查退出值。
timeout --preserve-status 1m ping -c 5 Nostromo.local echo $?ping完成五个ping请求并终止。退出代码为零。
为了验证退出代码是否来自ping,让我们强制ping生成一个不同的退出代码。如果我们尝试将ping请求发送到一个不存在的IP地址,ping将失败并返回一个错误退出代码。然后我们可以使用echo检查退出代码是否为非零。
timeout --preserve-status 1m ping -c 5 NotHere.local echo $?ping命令显然无法到达不存在的设备,因此它会报告错误并关闭。退出密码是2。这是ping用于一般错误的退出代码。
超时就是为运行程序提供一些边界。如果存在日志文件溢出硬盘驱动器或忘记网络工具运行的危险,请将其包装为超时并让计算机自行调节。
... 在GRUB#U HIDDENŠU TIMEOUT和GRUBŠU HIDDENŠTIMEOUTŠ安静线前放置一个Š标志。之后,通过运行以下命令保存这些更改: ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
... 进入文件后,在GRUB\u HIDDEN\u TIMEOUT和GRUB\u HIDDEN\u TIMEOUT\u QUIET条目前面添加一个#。接下来,按Ctrl+X保存更改。但是,要使这些更改真正起作用,您需要输入以下命令: ...
... 如何在windows10上安装linux bash shell ...
想在Linux系统上添加用户但不知道如何添加?在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...
...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...
...; /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" 以下是参数的含义: 复制:将文件从本地计算机复制到远程存储,跳过已存在...
...更多端口。出于我们的目的,我们将坚持默认值。 seq\ u timeout:某人必须访问端口以触发其打开或关闭的时间段。 命令:触发打开或关闭操作时发送到iptables防火墙的命令。这些命令要么将规则添加到防火墙(打开端口),要么...
...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...