当前位置: 首页 > news >正文

Linux C/C++ timeout命令实现(运行具有时间限制)

Linux附带了大量命令,每个命令都是唯一的,并在特定情况下使用。Linux timeout命令的一个属性是时间限制。可以为任何命令设置时间限制。如果时间到期,命令将停止执行。

如何使用timeout命令

我们将解释如何使用Linux timeout命令

timeout [OPTION] DURATION COMMAND [ARG]…
timeout [OPTION]

DURATION可以是正整数或浮点数,后跟可选的单位后缀:

s - seconds (default)
m - minutes
h - hours
d - days

未使用单位时,默认为秒。如果持续时间设置为零,则禁用关联的超时。

其他选项

DESCRIPTION--preserve-status以与COMMAND相同的状态退出,即使命令超时--foreground当不直接从shell提示符运行超时时,允许COMMAND从TTY读取并获得TTY信号;在此模式下,COMMAND的子级不会超时-k, --kill-after=DURATION如果COMMAND仍在运行,也发送KILL信号在发出初始信号后很久-s, --signal=SIGNAL指定超时时要发送的信号;SIGNAL可以是类似“HUP”的名称或数字;有关信号列表,请参见“kill-l”--help显示此帮助并退出 --version输出版本信息并退出

如何使用timeout命令的基本示例

  • 1.设置定时间后终止命令:

timeout 30 ping www.baidu.com

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

此命令允许ping运行五秒钟。它正在对www.baidu.com的域名进行ping,用于研究本文的测试网络上。

如果程序的执行在超时终止之前结束,超时可以将退出代码从程序传递回shell,要实现这一点,程序必须自动停止(换句话说,它不会因超时而终止),并且必须使用–preserve-status选项。

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

  • 2.发送正确的信号

当timeout想要停止程序时,它会发送SIGTERM信号。这礼貌地要求程序终止。某些程序可能选择忽略SIGTERM信号。

我们可以通过请求超时来发送SIGKILL信号来实现这一点。可以使用-s(signal)选项告诉超时以发送SIGKILL信号。

timeout -s SIGKILL 20 sudo tcpdump -i ens33 -n -w 20230212.pcap


我们可以使用tcpdump 抓包的默认选项运行20秒后,发送SIGKILL信号终止进程。

  • 3.尝试使用SIGTERM停止程序

我们使用-k(kill after)选项。-k选项需要一个时间值作为参数。在这个命令中,我们要求超时,让dmesg运行30秒,然后用SIGTERM信号终止它。如果dmesg在40秒后仍在运行,则意味着外交SIGTERM被忽略,超时应发送SIGKILL以完成任务。

timeout -k 40 30 dmesg -w


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

Linux C/C++ timeout命令实现

...
int main(int argc, char** argv) {
...for(int i=1;i<argc;i++) {char* arg = argv[i];if(strlen(arg) <= 0) continue;if(arg[0] == '-') {if(!strcmp(arg, "-h") || !strcmp(arg, "--help")) {printHelp(argv[0]);return EXIT_SUCCESS;} else if(!strcmp(arg, "-9") || !strcmp(arg, "--kill")) {sig_kill = SIGKILL;...} else {fprintf(stderr, "Illegal argument: %s\n", arg);return EXIT_FAILURE;}} else {/* 没有更多选项。检查是否有足够的剩余参数基本语法是/程序[OPTIONS]超时程序[ARGS]而超时和程序是强制性的  */if (i+2 > argc) {		// 检查是否给出超时和程序fprintf(stderr, "Not enough arguments. Check %s --help, if you need help\n", argv[0]);if(i+1 > argc) {// 检查参数是否为数字fprintf(stderr, "  Missing: TIMEOUT PROGRAM\n");} else {if(is_numeric(argv[i]))fprintf(stderr, "  Missing: PROGRAM\n");elsefprintf(stderr, "  Missing: TIMEOUT\n");}return EXIT_FAILURE;} else {int seconds = atoi(argv[i]);if(seconds < 0) {fprintf(stderr, "Timeout cannot be negative");return EXIT_FAILURE;}timeout = (unsigned int)seconds;// 合并程序和可选程序参数for(int j=i+1;j<argc;j++)command = strappend(command, argv[j]);break;}}}// 检查程序参数if(command == NULL || strlen(command) <= 0) {fprintf(stderr, "Not enough arguments. Check %s --help, if you need help\n", argv[0]);fprintf(stderr, "  Missing: TIMEOUT PROGRAM\n");return EXIT_FAILURE;}// Fork守护程序(如果需要)if (daemonize) {fork_daemon();}...int status;pid_t wait_status;// 信号处理器signal(SIGINT, sig_handler);signal(SIGTERM, sig_handler);signal(SIGALRM, sig_handler);if(verbose) printf("Child process forked with pid %d.\n", proc_pid);// 设置报警if(timeout > 0) alarm(timeout);wait_status = waitpid(proc_pid, &status, 0);		// Wait for childruntime += millis();if(wait_status < 0) {fprintf(stderr, "Error waiting for process: %s\n", strerror(errno));return EXIT_FAILURE;}status = WEXITSTATUS(status);		// 获取实际退出状态if(status != 0) {if(verbose) fprintf(stderr, "Process exited with status %d after %ld milliseconds\n", status, runtime);return status;} else {if(verbose) printf("Process completed after %ld milliseconds\n", runtime);return status;}}...
}
...
static void sig_handler(int sig_no) {switch(sig_no) {case SIGALRM:// Timeoutif(verbose)printf("TIMEOUT after %ld milliseconds.\n", runtime+millis());elseprintf("TIMEOUT\n");terminate_process();exit(EXIT_FAILURE);break;case SIGINT:case SIGTERM:if(proc_pid <= 0) exit(EXIT_FAILURE);if(verbose) printf("Program termination request\n");if(proc_pid > 0) kill(proc_pid, sig_no);exit(EXIT_FAILURE);return;}
}...

编译运行


If you need the complete source code of timeout, please add WeChat number (c17865354792)​

总结

总结

timeout是一个命令行实用程序,它运行指定的命令,如果在给定的时间段后仍在运行,则终止该命令。

Welcome to follow WeChat official account【程序猿编码

相关文章:

Linux C/C++ timeout命令实现(运行具有时间限制)

Linux附带了大量命令&#xff0c;每个命令都是唯一的&#xff0c;并在特定情况下使用。Linux timeout命令的一个属性是时间限制。可以为任何命令设置时间限制。如果时间到期&#xff0c;命令将停止执行。 如何使用timeout命令 我们将解释如何使用Linux timeout命令 timeout […...

西湖论剑初赛web wp

Node Magical Login 简单的js代码审计。 Flag分成了两部分。 第一部分&#xff1a; 这里就简单的判断了一下user是否等于admin&#xff0c;直接绕过。 第二部分&#xff1a; checkcode ! “aGr5AtSp55dRacer”&#xff0c;让其为真&#xff0c;利用数组绕过。 Flag为&#x…...

【YOLOv8/YOLOv7/YOLOv5系列算法改进NO.55】融入美团最新QARepVGG

文章目录 前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv8,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv8的如何改进进行详细…...

Flutter Windows端打包并生成可安装文件流程

Windows打包 1.首先安装visual Studio 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/ 下载成功后按照下图勾选桌面应用和移动应用下的使用C的桌面开发&#xff0c;勾选右侧安装详细信息中的windows 11/10 sdk 中的任意一个完成安装即可 2.打包Windows …...

凸优化学习:PART3凸优化问题(持续更新)

凸优化问题 凸优化问题的广义定义&#xff1a; 目标函数为凸函数约束集合为凸集 一、优化问题 基本用语 一般优化问题的描述&#xff1a; minimize⁡f0(x)subject to fi(x)⩽0,i1,⋯,mhi(x)0,i1,⋯,p(1)\begin{array}{ll} \operatorname{minimize} & f_0(x) \\ \text { s…...

[ue4] 着色器绑定(Shader Binding)

当我们在ue4中制作了一个美术材质之后&#xff0c;引擎本身会为我们做很多事情&#xff0c;它会把结点翻译为hlsl&#xff0c;生成多个shader变体&#xff0c;并在多个mesh pass中去选择性的调用所需的shader&#xff0c;其中一个重要的过程就是获取shader绑定的数据。 本文将主…...

Rust语言之迭代器

文章目录Rust迭代器Rust迭代器的实现Iterator特型IntoIterator特型for循环与迭代器迭代器类型再看for循环实现自定义迭代器方式一方式二相关参考Rust迭代器 Rust语言内置了迭代器模式&#xff0c;用于实现对一个项的序列进行特定的处理&#xff0c;通常配合for循环使用。当我们…...

TreeSet 与 TreeMap And HashSet 与 HashMap

目录 Map TreeMap put()方法 : get()方法 : Set> entrySet() (重) : foreach遍历 : Set 哈希表 哈希冲突 : 冲突避免 : 冲突解决 ---- > 比散列(开放地址法) : 开散列 (链地址法 . 开链法) 简介 : 在Java中 , TreeSet 与 TreeMap 利用搜索树实现 Ma…...

Java围棋游戏的设计与实现

技术&#xff1a;Java等摘要&#xff1a;围棋作为一个棋类竞技运动&#xff0c;在民间十分流行&#xff0c;为了熟悉五子棋规则及技巧&#xff0c;以及研究简单的人工智能&#xff0c;决定用Java开发五子棋游戏。主要完成了人机对战和玩家之间联网对战2个功能。网络连接部分为S…...

第七十三章 使用 irisstat 实用程序监控 IRIS - 使用选项运行 irisstat

文章目录第七十三章 使用 irisstat 实用程序监控 IRIS - 使用选项运行 irisstat使用选项运行 irisstatirisstat Options第七十三章 使用 irisstat 实用程序监控 IRIS - 使用选项运行 irisstat 使用选项运行 irisstat 不带选项运行 irisstat 会生成基本报告。通常&#xff0c;…...

【博客619】PromQL如何实现Left joins以及不同metrics之间的复杂联合查询

PromQL如何实现Left joins以及不同metrics之间的复杂联合查询 1、场景 我们需要在PromQL中实现类似SQL中的连接查询&#xff1a; SELECT a.value*b.value, * FROM a, b2、不同metrics之间的复杂联合查询 瞬时向量与瞬时向量之间进行数学运算&#xff1a; 例如&#xff1a;根…...

Win11自定义电脑右下角时间显示格式

Win11自定义电脑右下角时间显示格式 一、进入附加设置菜单 1、进入控制面板&#xff0c;选择日期和时间 2、选择修改日期和时间 3、选择修改日历设置 4、选择附加设置 二、自定义时间显示出秒 1、在选项卡中&#xff0c;选时间选项卡 2、在Short time的输入框中输入H:m…...

TrueNas篇-trueNas Scale安装

安装TrueNAS Scale 在尝试trueNas core时发下可以成功安装&#xff0c;但是一直无法成功启动&#xff0c;而且国内对我遇见的错误几乎没有案例&#xff0c;所以舍弃掉了&#xff0c;而且trueNas core是基于Linux的&#xff0c;对Linux的生态好了很多&#xff0c;还可以可以在t…...

element表单搜索框与表格高度自适应

一般在后台管理系统中&#xff0c;表单搜索框和表格的搭配是非常常见的&#xff0c;如下所示&#xff1a; 在该图中&#xff0c;搜索框有五个&#xff0c;分为了两行排列。但根据大多数的UI标准&#xff0c;搜索框默认只显示一行&#xff0c;多余的需要进行隐藏。此时的页面被…...

MySQL使用技巧整理

title: MySQL使用技巧整理 date: 2021-04-11 00:00:00 tags: MySQL categories:数据库 重建索引 索引可能因为删除&#xff0c;或者页分裂等原因&#xff0c;导致数据页有空洞&#xff0c;重建索引的过程会创建一个新的索引&#xff0c;把数据按顺序插入&#xff0c;这样页面…...

七大设计原则之里氏替换原则应用

目录1 里氏替换原则2 里氏替换原则应用1 里氏替换原则 里氏替换原则&#xff08;Liskov Substitution Principle,LSP&#xff09;是指如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都替换成 o2 时&#xff0c;程序 P…...

1行Python代码去除图片水印,网友:一干二净

大家好&#xff0c;这里是程序员晚枫。 最近小明在开淘宝店&#xff08;店名&#xff1a;爱吃火锅的少女&#xff09;&#xff0c;需要给自己的原创图片加水印&#xff0c;于是我上次给她开发了增加水印的功能&#xff1a;图片加水印&#xff0c;保护原创图片&#xff0c;一行…...

Connext DDS属性配置参考大全(2)

DDSSecure安全com.rti.servcom.rti.serv.load_plugin...

一起Talk Android吧(第四百九十二回:精简版动画)

文章目录概念介绍使用方法示例代码经验总结各位看官们大家好&#xff0c;上一回中咱们说的例子是"动画集合&#xff1a;AnimatorSetBuilder",这一回中咱们说的例子是" 精简版动画"。闲话休提&#xff0c;言归正转&#xff0c;让我们一起Talk Android吧&…...

seata源码-全局事务回滚服务端源码

这篇博客来记录在发起全局事务回滚时&#xff0c;服务端接收到netty请求是如何处理的 1. 发起全局事务回滚请求 在前面的博客中&#xff0c;有说到过&#xff0c;事务发起者在发现分支事务执行异常之后&#xff0c;会提交全局事务回滚的请求到netty服务端&#xff0c;这里是发…...

【Vue3源码】第一章 effect和reactive

文章目录【Vue3源码】第一章 effect和reactive前言1、实现effect函数2、封装track函数&#xff08;依赖收集&#xff09;3、封装reactive函数4、封装trigger函数&#xff08;依赖触发&#xff09;5、单元测试【Vue3源码】第一章 effect和reactive 前言 今天就正式开始Vue3源码…...

C函数指针

函数指针是指向函数的指针变量。通常我们说的指针变量是指向一个整型、数组或字符型等变量&#xff0c;而函数指针是指向函数。函数指针可以像一般函数一样&#xff0c;用于调用函数、传递参数。函数指针变量的声明&#xff1a;typedef int (*fun_ptr)(int,int); // 声明一个指…...

2023同等学力申请硕士计算机综合国考

同等学力国考报名要开始了 2023年2月15日&#xff0c;中国教育考试网和“全国同等学力人员申请硕士学位管理工作信息平台”&#xff08;https://tdxl.chsi.com.cn&#xff0c;联系服务电话&#xff1a;010-67410388&#xff09;公布报名工作通知。考生须按照通知要求进行注册或…...

英语基础-并列句概述

什么是并列句&#xff1f;并列句就是用连词把独立的句子连接起来&#xff0c;使得句子之间产生并列的逻辑。 1. 并列句中的逻辑 1. 小明步行上学&#xff0c;小红骑自行车上班。 Ming goes to school on foot,and Hong goes to work by bike. 平行逻辑 2. 小红经常玩手机…...

大数据框架之Hadoop:HDFS(一)HDFS概述

1.1HDFS产出背景及定义 HDFS 产生背景 随着数据量越来越大&#xff0c;在一个操作系统存不下所有的数据&#xff0c;那么就分配到更多的操作系统管理的磁盘中&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机器上的文件&#xff0c;这就是分布式文件…...

20230210组会论文总结

目录 【Ultra-High-Definition Low-Light Image Enhancement: A Benchmark and Transformer-Based Method】 【ShuffleMixer: An Efficient ConvNet for Image Super-Resolution】 【A Close Look at Spatial Modeling: From Attention to Convolution 】 【DEA-Net: Single i…...

Python - 数据容器dict(字典)

目录 字典的定义 字典数据的获取 字典的嵌套 字典的各种操作 新增与更新元素 [Key] Value 删除元素 pop和del 清空字典 clear 获取全部的键 keys 遍历字典 容器通用功能总览 字典的定义 使用{}&#xff0c;不过存储的元素是一个个的&#xff1a;键值对&#…...

傻白探索Chiplet,文献阅读笔记汇总(十二)

Summary&#xff08;方便分类管理&#xff09; Article&#xff08;文献出处&#xff09; 方便再次搜索 Data&#xff08;文献数据&#xff09; 总结归纳&#xff0c;方便理解 Comments&#xff08;对文献的想法&#xff09;/Why&#xff08;为什么看这篇文献&#xff09;强…...

#电子电气架构——Vector工具常见问题解决三板斧

我是穿拖鞋的汉子,魔都中一位坚持长期主义的工科男。 今天在与母亲聊天时,得到老家隔壁邻居一位大姐年初去世的消息,挺让自己感到伤感!岁月如流水,想抓都抓不住。想起平时自己加班的那个程度,可能后续也要自己注意身体啦。 老规矩,分享一段喜欢的文字,避免自己成为高知…...

文本三剑客之grep

Grep是Linux用户用来搜索文本字符串的命令行工具。您可以使用它在文件中搜索某个单词或单词的组合&#xff0c;也可以将其他Linux命令的输出通过管道传输到grep&#xff0c;因此grep可以仅显示您需要查看的输出。grep的命令格式如下&#xff1a;grep 选项 查找条件 目标文件…...

中小企业建立网站最经济的方式/查关键词排名软件

最近在弄linux系统的环境&#xff0c;搭建vue环境&#xff0c;由于是第一次接触vue以前也没使用过&#xff0c;所以才搭建环境的时候还是挺闷逼的。记录一下&#xff0c;免得以后忘记了。 安装cnpm 由于不知道vue和npm的关系&#xff0c;所以自己想先安装npm并设置成阿里的cnpm…...

企业网站怎样做外链方法/google推广

题目描述&#xff1a; 给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。 示例: 给定 nums …...

试述建设一个网站的具体步骤/竞价排名什么意思

好久没有面试了&#xff0c;最近打算换份工作&#xff1b;自从从事工作以来 没有太大的技术动力目标去实现技术上的突破&#xff0c;一直在原地踏步走&#xff0c;中间做过运营及其他和技术不相关工作&#xff0c;算是脱离过技术一段时间&#xff0c;然而在真正的找工作的时候 …...

B2B第三方网站建设的流程/如何优化推广网站

1、需求 采用codemirror 6版本开发 &#xff0c;要求&#xff1a;自定义代码提示 &#xff0c;通过输入关键字&#xff0c;实现代码片段覆盖。 类似于Vscode中输入VueInit &#xff0c;显示代码片段&#xff1a; <template lang""><div></div> &l…...

wordpress 模板 政府/百度推广咨询

SpringBoot 之简单工厂模式 简单工厂&#xff1a; 工厂类根据传入的参数类型&#xff0c;动态决定创建哪一个产品了&#xff08;实现类都继承同一个父类或接口&#xff09;。在Spring中&#xff0c;我们只要将要用到的支付方式注入到容器中&#xff0c;我们便可以根据bean到名…...

英语网站如何做社群/sem专业培训公司

quartz---我为什么要使用quartz quartz是什么&#xff1f;怎么使用&#xff1f;本文不做介绍&#xff0c;有兴趣的朋友可以看笔者之前的博客以及自己查阅相关资料。本文笔者主要想介绍一下我为什么使用Quartz以及在“jrkj”这个项目中运用的场景。 应用场景一 更新静态数据 接着…...