栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【Linux C语言】周期性调度程序 附源码

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Linux C语言】周期性调度程序 附源码

使用调度程序 可以实现周期性启动脚本/服务程序

简单的示例程序 每2秒往1.txt写入hello

#include 
#include 
#include 
#include 
#include 
#include 

int main(int argc,char *argv[])
{  
   if (argc<3)
   {    
        printf("Using:./procctl timetvl program argv ..n");
        printf("Example:/project/tools1/bin/procctl 60 /usr/bin/touch 'hello'>>1.txtnn");
        
        printf("本程序是服务程序的调度程序,周期性启动服务程序/shell脚本。n");
        printf("program 被调度的程序名,必须使用全路径。n");
        printf("argvs 被调度程序的参数。n");
        printf("注意:本程序不会被kill杀死,但可以使用kill -9 强行杀死。nn");
        
        return -1;
    }

   for (int ii=0;ii<64;ii++)
   {
      signal(ii,SIG_IGN);  // 屏蔽全部信号

      //close(ii);      // 关闭io 根据自己的情况选择关闭
   }

   signal(SIGCHLD,SIG_DFL);     // 恢复子进程退出信号 不然wait一直阻塞 子进程一直生成

   // 获取时间后面的 运行程序及参数
   char *pargv[argc];
   for (int ii=2;ii0) exit(0);

   // 进程2 使用execv函数调用程序
   // 进程1 阻塞等待进程2结束 等待argv[1]秒后 循环继续
   while(true)
   {
      // 子进程调用程序
      if (fork()==0)
      {
         execv(argv[2],pargv);   // 参数1 调用的程序名 参数2 程序参数 
         exit(0);
      }
      else      // 父进程阻塞等待子进程退出
      {
         int status;
         wait(&status);
         sleep(atoi(argv[1]));  // 参数2 调度时间
      }
   }

   return 0;
}

关于关闭父进程的解答
关闭父进程 进程直接属于操作系统托管
不关闭 属于终端托管会卡窗口

卡窗口 无法操作

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873044.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号