`
com1com4
  • 浏览: 161627 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Delphi实现deamon进程

 
阅读更多

某程序因调用外部库比较多,容易异常退出,一时间未找到具体问题点,先让程序实现崩溃时自启动临时对付对付。

基本原理是以自身程序作为deamon进程,再通过参数(-child)控制启动子进程,加载自身业务真正需要运行的代码,deamon进程通过WaitForSingleObject等候子进程状态返回,当子进程非正常退出(exitcode <>0)则重启子进程。

unit uDeamon;
{
为减少其它单元initialization段加载造成的开销, 此单元需前置加载
}
interface
uses
  Windows, SysUtils;


  function isDeamonProcess():Boolean;

implementation
uses
  uLog;

procedure runDeamon();
var
  si: TStartupInfo;
  pi: TProcessInformation;
  exitCode: Cardinal;
  exePath, command: String;
  i, exitCount: Integer;
begin
  ZeroMemory(@si, SizeOf(si));
  ZeroMemory(@Pi, SizeOf(pi));
  si.cb := SizeOf(si);
  exePath := ParamStr(0);
  for i := 1 to ParamCount do
    command := command + ' ' + ParamStr(i);
  command := exePath + ' ' + command + ' -child';
  Log('Start child process: ' + command);
  exitCount := 0;
  repeat
    if CreateProcess(nil, PChar(command), nil, nil, False, 0, nil, PChar(ExtractFileDir(exePath)), si, pi) then
    begin
      CloseHandle(pi.hThread);
      WaitForSingleObject(pi.hProcess, INFINITE);
      GetExitCodeProcess(pi.hProcess, exitCode);
      Inc(exitCount);
      Log('Child exit: ' + IntToStr(exitCode) + ', Exit times: ' + IntToStr(exitCount));
      CloseHandle(pi.hProcess);
      if exitCount >= 20 then begin
        // 连续重启超过20次后, 不再进行重启.
        Log('Too many times to restart, an unrecoverable error maybe occur, child process will not be restart.');
        Break;
      end;
    end else
      Break;
  until exitCode = 0;
end;

function hasChildParam(): Boolean;
var
  i: Integer;
begin
  Result := False;
  for I := 1 to ParamCount do begin
    if SameText(ParamStr(i), '-child') then begin
      Result := True;
      Break;
    end;
  end;
end;

function isDeamonProcess(): Boolean;
begin
  Result := not hasChildParam();
end;

initialization
  // 减少deamon进程开销, 在initialization段即执行相关代码
  if not hasChildParam then begin
    runDeamon;
    ExitProcess(0);
  end;
end.
分享到:
评论

相关推荐

    DEAMON

    虚拟光驱.听说现在居然收费了...

    DeamonTools4.12.1 DeamonTools4.12.1虚拟光驱

    《DeamonTools4.12.1:虚拟光驱技术详解及应用》 Deamon Tools是一款广受欢迎的虚拟光驱软件,其4.12.1版本为用户提供了高效便捷的光盘映像处理功能。在数字化存储日益普及的时代,虚拟光驱软件如Deamon Tools已经...

    Daemon Tools.rar_Daemon Tools_daemon_deamon_deamon tools

    在标签中提到的“daemon”和“deamon_tools”,实际上是对软件名称的英文拼写变体,"daemon"是英文中代表“守护进程”的意思,在这里是指后台运行的服务程序,即Daemon Tools在后台默默工作,为用户提供虚拟光驱服务...

    最新汉化Deamon4.3

    最新汉化Deamon4.3 (支持Viata) 现在网上有很多游戏和软件都做成了ISO或者CCD等镜像格式,有些游戏,比如大宇出品的轩辕剑,大富翁7等游戏,由于游戏盘是加密的,所以镜像文件只能做成mds格式的。当你辛辛苦苦下载...

    linux-deamon-programming.zip_linux deamon

    在"linux deamon programming.txt"这个文本文件中,可能会包含具体的C语言代码示例,演示如何按照上述步骤实现一个简单的守护进程。通常,代码会包含初始化阶段的各个步骤,然后进入一个无限循环,直到接收到停止...

    虚拟光驱DEAMON

    标题中的“虚拟光驱DEAMON”指的是DEAMON Tools,这是一个非常著名的虚拟光驱软件。虚拟光驱软件允许用户在计算机上创建虚拟驱动器,这些驱动器可以模拟实际的CD或DVD驱动器,但无需物理介质。DEAMON Tools是这类...

    我的deamon 传动系

    "我的deamon 传动系"这个标题可能是指一个与守护进程(Daemon)相关的软件系统或者一个自定义的服务管理工具,其核心是实现程序在后台稳定运行,类似于操作系统中的服务。守护进程通常在用户登录会话之外运行,为...

    我自己写的守护进程-源码

    2. **后台运行**:为了实现类似守护进程的功能,程序可能使用`CreateService`或`SetServiceObjectSecurity`函数将进程设置为服务,这样即使没有用户登录,进程也能在后台持续运行。 3. **信号处理**:守护进程通常...

    DeamonTools advanced 5.2最新版破解

    最新最好用的虚拟光驱,就是Deamontools advanced 5.2 只用最新版

    DEAMON Tools Pro(专业版虚拟光驱)

    DEAMON Tools Pro是一款在IT行业内广泛使用的专业虚拟光驱软件,它的全称可能是"DAEMON Tools Pro Advanced"。这款工具允许用户创建虚拟光驱,从而在计算机上模拟实际光盘的功能,而无需物理光盘。它对于那些频繁...

    PHP5.6-DEAMON with composer

    标题 "PHP5.6-DEAMON with composer" 指的是使用PHP 5.6版本结合Composer工具来实现一个守护进程(Deamon)服务。PHP从5.4版本开始引入了一个内置的Web服务器功能,这使得开发者在本地进行开发和测试时无需依赖...

    daemon:用于运行 php 守护进程的库

    它解决了 php 在这方面的局限性,并实现了一些合理的默认行为。 主要目标是提供一种健壮的方式来连续运行 php 代码,同时将业务逻辑与运行后台任务的细节分离。 我们像其他人一样讨厌多余的样板,所以守护进程有一...

    live_deamon.dll

    live_deamon.dllC++版本的数据集里面如果某一个样本的某一个特征为0,这个特征可以不写在数据集中,但是在matlab版本中

    Deamon Tools虚拟光驱

    "Deamon Tools虚拟光驱"是一款著名的虚拟光驱软件,被广泛用于计算机用户之中,尤其在游戏、软件安装和系统维护领域。...通过其提供的便捷功能,用户可以轻松管理和使用各种光盘镜像,实现高效的工作流程。

    Deamon Tools虚拟光驱 4.06汉化版

    一个不错的虚拟光驱工具,支持Win9x/win2k,支持ps,支持加密光盘,装完不需启动即可用。是一个先进的模拟备份并且合并保护盘的软件,可以备份SafeDisc保护的软件,可以打开CUE,ISO and CCD 等这些虚拟光驱的镜像...

    daemon进程生成脚本

    至于文件"frame",这可能是脚本的核心部分,包含了上述步骤的实现。如果要深入理解这个脚本的工作原理,需要查看其具体内容。通常,这样的脚本可以通过参数接收配置选项,例如pid文件路径、日志文件位置等。 总结来...

    php实现简单的守护进程创建、开启与关闭操作

    startDeamon()用于初始化守护进程并创建子进程;start()方法用于执行守护进程的主循环;stop()方法用于停止守护进程;run()方法是类的入口点,根据传入参数决定执行start()或stop()。 2. 守护进程的初始化。在start...

    DEAMON TOOLS 3.47 虚拟光驱软件

    3. **快速加载与卸载**:快速加载光盘映像,实现即插即用的便捷性,同时也能迅速卸载,切换不同映像文件。 4. **光盘刻录**:虽然主要功能是虚拟光驱,但部分版本还支持光盘刻录功能,用户可以将数据写入物理光盘。 ...

    deamon tools 3.47

    同时,它还有着快速的虚拟光驱响应速度,能实现几乎与物理光驱相同的速度读取镜像数据,无论是游戏安装还是软件运行,都能流畅进行,减少了物理光驱的磨损,延长了设备寿命。 值得注意的是,3.47版本的Daemon Tools...

Global site tag (gtag.js) - Google Analytics