linux用户命令,运行某个命令后,指定运行时间过后自动结束程序运行的timeout命令详解

timeout命令介绍:

这个命令在linux的各大发行版本中几乎都自带的,无需安装,终端输入命令即可运行。

启动命令后,如果在指定的时间过后仍在运行,则杀死该运行的程序。

timeout命令书写语法格式:

timeout [OPTION] DURATION COMMAND [ARG]...
timeout [选项,不是必填] 命令可以运行的时间 任意命令 [参数,不是必填]...

DURATION(持续运行的时间)可以是正整数或浮点数,后跟可选的单位后缀:

  • s-秒(默认)
  • m-分钟
  • h-小时
  • d-天

不指定单位时,默认为秒。 如果持续时间设置为零,则后面运行的任意命令都不会被强制杀死,直到该命令自身运行结束为止(其实设置为0后,这该命令也就失去了使用它的意义);必须在参数前提供命令选项。

命令使用示例:

linux中的ping命令执行后,只要用户不在终端结束该命令或者不关闭当前命令运行的终端,就会一直运行,这时候我们可以使用timeout命令配合ping命令,实现在3秒后结束ping。

timeout 3 ping qq.com命令演示

参数讲解:

注:在书写命令的时候,长选项必须使用的参数对于短选项时也是必需使用的。

--help参数

--help 显示timeout的帮助文档信息并退出。
timeout --help命令演示

--version参数

--version 输出当前timeout的版本信息并退出。
timeout --version

-s,--signal指定信号参数

-s, --signal=SIGNAL
    如果未给出任何信号,则当达到时间限制时,timeout将SIGTERM信号发送到托管命令。
    可以使用-s(-signal)选项指定要发送的信号。
    指定的信号可以是“HUP”之类的名称或数字;有关信号列表,请参见“kill-l”

这里首先来说明下信号:

程序如果不对信号处理,就会导致程序退出,但如果程序捕获信号进行处理,按照它的逻辑,它是不一定会退出的。

使用timeout命令后如果不指定信号系统会发送一个SIGTERM的信号给对应的程序。当程序接收到该signal后,将会发生以下的事情

  • 程序立刻停止
  • 当程序释放相应资源后再停止
  • 程序可能仍然继续运行

大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以配置的。如果程序正在等待IO,可能就不会立马做出相应。也就是说,SIGTERM多半是会被阻塞的、忽略。

熟知的kill  -9 pid 、kill  -SIGKILL命令执行后动作是立即结束指定进程,也就是强制杀死,不会等待这个命令跑完未完成作业后在进行杀死的。

例如我们运行一个命令后,我希望它3秒后立刻停止运行,也不会在后台让他继续在运行,就可以这样使用,示例如下:

timeout -s sigkill 3 ping qq.com
           sigkill也可以替换为数字9
ping命令运行3秒强制结束
ping命令运行3秒强制结束

当然也可以指定其它各种信号,这里就不一一列举,可以使用kill -l查看系统内的所有信号

查看linux系统内的所有信号 kill -l

-k, --kill-after=DURATION杀死进程参数

       -k, --kill-after=DURATION

              also send a KILL signal if COMMAND is still running

              this long after the initial signal was sent
              要确保被执行的的命令完全终止,请使用-k(--kill after)选项,后面加一个时间。
              当达到给定的时间限制后会强制结束(相当于kill -9或者-s sigkill)。

示例:ping命令运行一分钟,如果命令没有结束,将在10秒后完全终止命令

timeout -k 10 1m ping qq.com
本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
linux用户命令,运行某个命令后,指定运行时间过后自动结束程序运行的timeout命令详解
这个命令在linux的各大发行版本中几乎都自带的,无需安装,终端输入命令即可运行。
<<上一篇
下一篇>>