设定Linux C/C++ 程序的执行时限
📅 2026/7/26 17:32:32
👁️ 次浏览
给Linux C/C程序设定执行时限时间管理是每个现代人的必修课。给一个任务固定的执行时间是控制整体进度的一种常用方法。如何让一个运行时间可能比较长的Linux C/C程序能够有一个执行时限呢这就是本文要解答的一个问题。方法一最直接的做法就是起一个timer设定该timer到期发送SIGTERM信号。如果定时器超时后需要做善后工作那么就给SIGTERM信号写一个信号处理函数若不需要善后工作则不用写。// g timer.cpp -lrt#includectime#includecstdlib#includecstdio#includecstring#includesignal.h#includeunistd.hvoidCreateAndStartTimer(unsignedintwait_seconds){if(wait_seconds0)return;timer_t timerid;structsigeventsev;structitimerspecits;// Create the timersev.sigev_notifySIGEV_SIGNAL;sev.sigev_signoSIGTERM;sev.sigev_value.sival_ptrtimerid;if(timer_create(CLOCK_MONOTONIC,sev,timerid)-1){fprintf(stderr,Failed to create timer, will continue running.\n);return;}// Start the timerits.it_value.tv_secwait_seconds;its.it_value.tv_nsec0;its.it_interval.tv_sec0;its.it_interval.tv_nsec0;if(timer_settime(timerid,0,its,NULL)-1){fprintf(stderr,Failed to set timer, will continue running.\n);}}intmain(intargc,char*argv[]){unsignedintwait_seconds0;if(argc!2){fprintf(stderr,Usage: %s time-out-seconds \n,argv[0]);exit(EXIT_FAILURE);}wait_secondsatoi(argv[1]);if(wait_seconds0)CreateAndStartTimer(wait_seconds);while(1){sleep(1);}return0;}以上是最简洁的做法。因为要做的工作就是时间到了杀死本进程因而也没有什么好多做处理的。基本上本文到此就可以结束了。要注意的主要是timer_create(),timer_settime()以及sigevent的用法。man一下基本上就比较清楚了。方法二在有些情况下需要捕获实时信号而在设定实时信号的处理函数时有可能希望暂时屏蔽实时信号待设置完再进行处理。这些都是比较常见的需求。这里以另一个程序来演示实时信号以及屏蔽和去屏蔽信号的做法。// g timer.cpp -lrt#includectime#includecstdlib#includecstdio#includecstring#includesignal.h#includeunistd.h#defineerrExit(msg)do{perror(msg);exit(EXIT_FAILURE);}while(0)#defineSIGSIGRTMINtypedefvoid(*signal_handler_t)(int,siginfo_t*,void*);voidsignal_handler(intsigno,siginfo_t*info,void*context){pid_t myselfgetpid();kill(myself,SIGTERM);}voidset_signal_handler(intsigno,signal_handler_t handler){structsigactionsigaction_info;memset(sigaction_info,0,sizeof(sigaction_info));sigset_t sigset_info;sigemptyset(sigset_info);sigaction_info.sa_handlerNULL;sigaction_info.sa_sigactionhandler;sigaction_info.sa_masksigset_info;sigaction_info.sa_flagsSA_SIGINFO;}voidCreateAndStartTimer(unsignedintwait_seconds){if(wait_seconds0)return;timer_t timerid;structsigeventsev;structitimerspecits;sigset_t mask;set_signal_handler(SIG,signal_handler);// Block timer signal temporarilysigemptyset(mask);sigaddset(mask,SIG);if(sigprocmask(SIG_SETMASK,mask,NULL)-1){errExit(sigprocmask);}// Create the timersev.sigev_notifySIGEV_SIGNAL;sev.sigev_signoSIG;sev.sigev_value.sival_ptrtimerid;if(timer_create(CLOCK_REALTIME,sev,timerid)-1){fprintf(stderr,Failed to create timer, will continue running.\n);return;}// Start the timerits.it_value.tv_secwait_seconds;its.it_value.tv_nsec0;its.it_interval.tv_sec1;its.it_interval.tv_nsec0;if(timer_settime(timerid,0,its,NULL)-1){fprintf(stderr,Failed to set timer, will continue running.\n);}// Unblock timer signalif(sigprocmask(SIG_UNBLOCK,mask,NULL)-1){errExit(sigprocmask);}}intmain(intargc,char*argv[]){unsignedintwait_seconds0;if(argc!2){fprintf(stderr,Usage: %s time-out-seconds \n,argv[0]);exit(EXIT_FAILURE);}wait_secondsatoi(argv[1]);if(wait_seconds0)CreateAndStartTimer(wait_seconds);while(1){sleep(10);}exit(EXIT_SUCCESS);}方法三最后还有一种土办法可以不用timer. 那就是再开一个线程在其中写一个 while (true) 的循环循环体中 sleep(1). 每次醒来的时候检查一下时间过去了多久。如果时间已经超过了设定的时限那么就获得本进程的pid并且发送 SIGTERM 信号给本进程。这个代码就不列在这里了可以参见 ThreadTimeKiller(END)
1. 项目背景与行业痛点制药行业的质量监管体系长期以来面临多重挑战。传统人工审核方式存在效率低下、标准不统一、人为误差难以避免等问题。以某跨国药企的GMP文档审核为例,平均每份200页的技术文件需要3名资深QA人员花费5个工作日完成交叉核对,其中约1…
📅 2026/7/26 17:32:32
处理分页错误与空数据:infinite_scroll_pagination异常场景解决方案 【免费下载链接】infinite_scroll_pagination Flutter package to help you lazily load and display pages of items as the user scrolls down your screen. 项目地址: https://gitcode.com/g…
📅 2026/7/26 17:32:32
Android App 弱网测试怎么做?网准通NetAccura网络损伤仪透明桥方案
Android App 的弱网问题通常不是“完全没网”,而是网络在几秒钟内变慢、抖动、连续丢包、切换或短时中断。仅靠开发者选项、代理软件或单机限速,很难把这些条件稳定复现给整个测试团队。
更适合正式回归的…
📅 2026/7/26 17:32:32
昨晚十一点,我盯着手机屏幕,蓝光刺得眼睛生疼。朋友圈里,有人在晒刚买的限量版球鞋,有人在抱怨加班到深夜的疲惫,还有人在炫耀刚拿到的offer。那一刻,我突然感到一种深深的无力感。这种无力感不是来自工作本身,而是来自一种被裹挟的焦虑。我们好像都在拼命奔跑,却忘了为…
📅 2026/7/26 19:24:33
1. 先理解“词数诅咒”到底在说什么如果你用过任何主流大语言模型(LLMs),不管是 ChatGPT、Claude 还是本地部署的开源模型,大概率遇到过这种情况:输入一段长文本后,模型要么直接拒绝处理,要么返…
📅 2026/7/26 19:25:06
3大渲染难题的终极解决方案:Photon光影包深度技术解析 【免费下载链接】photon A gameplay-focused shader pack for Minecraft 项目地址: https://gitcode.com/gh_mirrors/photon3/photon
在Minecraft的视觉体验优化领域,Photon光影包代表了游戏…
📅 2026/7/26 19:25:06
1. 先搞清楚 Epoch AI 这次直播到底测了什么如果你关注大模型进展,大概率已经看到 Epoch AI 直播评测 GPT 5.6 Sol 的消息。这类直播评测最值得看的不是最终跑分,而是测试方法、基准选择和实际运行过程。很多团队自己跑模型时容易忽略环境一致性、输入格…
📅 2026/7/26 19:25:06
ChromePass终极指南:3分钟找回所有Chrome保存密码的完整解决方案 【免费下载链接】chromepass Get all passwords stored by Chrome on WINDOWS. 项目地址: https://gitcode.com/gh_mirrors/chr/chromepass
你是否曾经因为忘记密码而无法登录重要网站&#x…
📅 2026/7/26 19:25:06
最近看到 OpenAI 员工用 Codex 做游戏的消息,让我对 AI 辅助编程产生了浓厚兴趣。作为开发者,我们总是希望找到提升编码效率的新工具,而 Codex 这样的 AI 代码生成模型确实能带来不少惊喜。本文将带你从零开始,使用类似 Codex 的 …
📅 2026/7/26 19:25:06
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/26 7:10:22
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/26 17:10:53
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/26 5:10:17