前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux用户命令,运行某个命令后,指定运行时间过后自动结束程序运行的timeout命令详解

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

原创
作者头像
子沐u
修改2022-03-15 16:03:05
10.5K1
修改2022-03-15 16:03:05
举报
文章被收录于专栏:星星

timeout命令介绍:

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

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

timeout命令书写语法格式:

代码语言:javascript
复制
timeout [OPTION] DURATION COMMAND [ARG]...
代码语言:javascript
复制
timeout [选项,不是必填] 命令可以运行的时间 任意命令 [参数,不是必填]...

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

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

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

命令使用示例:

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

timeout 3 ping qq.com命令演示
timeout 3 ping qq.com命令演示

参数讲解:

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

--help参数

代码语言:javascript
复制
--help 显示timeout的帮助文档信息并退出。
timeout --help命令演示
timeout --help命令演示

--version参数

代码语言:javascript
复制
--version 输出当前timeout的版本信息并退出。

timeout --version
timeout --version

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

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

这里首先来说明下信号:

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

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

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

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

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

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

代码语言:javascript
复制
timeout -s sigkill 3 ping qq.com
           sigkill也可以替换为数字9

ping命令运行3秒强制结束
ping命令运行3秒强制结束
ping命令运行3秒强制结束
ping命令运行3秒强制结束

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

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

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

代码语言:javascript
复制
       -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
timeout -k 10 1m ping qq.com

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • timeout命令介绍:
  • timeout命令书写语法格式:
  • 命令使用示例:
  • 参数讲解:
    • --help参数
      • --version参数
        • -s,--signal指定信号参数
          • -k, --kill-after=DURATION杀死进程参数
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档