转自波哥的译文,必须转过来,太有价值了!原文地址在这里。以下为原文内容:

本文译自 原文链接,语言上做了精炼和排版的变更,以便更简洁明了。

Delphi 开始支持 Linux 平台为 Delphi 开发人员开辟了创建 Linux 服务器应用程序的可能。但遗憾的是,目前 RAD Studio IDE 并不包括创建 Linux 守护程序(Windows中的服务)。

【注意】本文假设您已经能够配置好 Linux 编译环境并知道如何在 Linux 命令行启动它。否则请参考:

【守护进程】

在Linux操作系统下,守护进程只是一个没有标准输入和输出流的进程。它在后台运行并不接受键盘输入也不会向屏幕输出(当然可以输出日志)。

【创建服务】

1、创建一个控制台项目,并添加 Linux64 为编译目标。
2、uses 中加入 Posix.Unistd 单元,以便引用其中的 fork 函数创建子进程。
3、在程序的入口地方加入对 fork 的调用,以创建子服务进程。注意 fork 函数的返回子进程的进程 ID,我们有可能需要将它写入到一个配置文件中,以便控制服务的结束(这是后话,原文中没说),下面的示例只是做了一个简单的判断直接退出了。
4、fork 成功后调用 exit 退出当前进程,如果返回值为0,代表自己是子进程。然后执行后面的进程就可以了。

program Project1;
{$APPTYPE CONSOLE} {$R *.res} uses
System.SysUtils,
Posix.Unistd; begin
try
if fork()<> then begin
exit;
end;
...
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

5、编译并发布到目标计算机运行进程。

【创建服务】

这一步在不同的平台上不太一样,早期的 Linux 是创建一个脚本,放到 init.d 里,然后一步步注册。新的 centos 是在 /lib/systemd/system 添加 xxx.service 定义。具体就参考相应的文档配置就可以了。

【转】在 Delphi 中创建 Linux 守护程序(服务进程)的更多相关文章

  1. 在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程!(更好的管理异常)

    在Delphi中创建线程,请一定使用BeginThread()代替CreateThread()创建线程! 如果直接使用Win32的API函数CreateThread()创建多个线程,也是可以创建的.但 ...

  2. Delphi中统一显示表格字段名的高效方法

    问题描述:在开发数据库程序时,我们经常要使用很多的表格显示组件DBGrid.当DBGrid显示某表格的数据时,其字段标题默认的就是后台数据库中的表格的字段名称.而为了数据库开发方便,后台数据库中的表格 ...

  3. 如何在 Azure 中的 Linux 经典虚拟机上设置终结点

    在 Azure 中使用经典部署模型创建的所有 Linux 虚拟机都可以通过专用网络通道与同一云服务或虚拟网络中的其他虚拟机自动通信. 但是,Internet 或其他虚拟网络中的计算机需要终结点将入站网 ...

  4. node中创建服务进程

    背景 在node工程部署中,常常涉及到三方:本地客户端.跳板机和服务器(集群).在通过git触发gitlab hook脚本后,需要在跳板机中执行相应的ssh命令执行shell文件启动node服务器,这 ...

  5. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

  6. Delphi中DLL的创建和使用

    参考:http://blog.csdn.net/ninetowns2008/article/details/6311663 结合这篇博客:http://www.cnblogs.com/xumenger ...

  7. 如何在Linux命令行中创建以及展示演示稿

    导读 你在准备一场演讲的时候,脑海可能会先被图文并茂.形象华丽的演示图稿所占据.诚然,没有人会否认一份生动形象的演讲稿所带来的积极作用.然而,并非所有的演讲都需要TED Talk的质量.更多时候,演讲 ...

  8. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

  9. 在Linux中创建静态库和动态库

    我们通常把一些公用函数制作成函数库,供其它程序使用. 函数库分为静态库和动态库两种. 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库. 动态库在程序编译时并不会被连接到目标代码中 ...

随机推荐

  1. 阶段5 3.微服务项目【学成在线】_day03 CMS页面管理开发_07-新增页面-前端-页面完善

    在新增页面加返回按钮 <el-button type="primary" @click="go_back" >返回</el-button> ...

  2. mfc移动文件夹

    SHFILEOPSTRUCT FileOp; ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT)); FileOp.fFlags = FOF_NO ...

  3. matlab学习——01线性规划

    01线性规划 format compact; % min fx % Ax<=b % Aeq*x=beq % lb<=x<=ub % % max z=2x1+3x2-5x3 % x1+ ...

  4. Flutter之切换导航TabBar组件

    TabController 这是Tab页的控制器,用于定义Tab标签和内容页的坐标,还可配置标签页的切换动画效果等. TabController的创建有两种形式,一种是使用系统的DefaultTabC ...

  5. Unity Shader基础:编译指令

    UntiyShader中,编译指令分为两种: 1.顶点片元着色器(Vetex & Fragment Shader)使用的编译指令 2.表面着色器(Surface Shader)使用的编译指令 ...

  6. QFramework 使用指南 2020 (四):脚本生成(2)ViewController 与 ViewController 嵌套绑定

    在上一篇,我们学习了,脚本生成的基本使用. 在这一篇,我们试着深入,聊聊脚本生成给我们带来的便利. 脚本生成的便利 首先,我们要知道,在 Unity 的游戏世界中都是以 GameObject 为单位的 ...

  7. 十步学习法 -- 来自<<软技能>>一书的学习方法论

    <<软技能>>第三篇“学习”,作者讲述了自己的学习方法:十步学习法.下面我用编程语言的方式来介绍. 十步学习法 伪代码介绍 # **这一步的目的不是要掌握整个主题,而是对相关内 ...

  8. (长期更新)【机器学习实践】Pycharm编辑器的使用注意事项

    1. 写Python代码,根据PEP8风格,默认一行的长度不超过 80 个字符. 但是pycharm 默认是第 120 个字符处,故进行修改:  File→Settings→Editor→Code S ...

  9. (模板)poj2387(dijkstra+优先队列优化模板题)

    题目链接:https://vjudge.net/problem/POJ-2387 题意:给n个点(<=1000),m条边(<=2000),求结点n到结点1的最短路. 思路:dijkstra ...

  10. HTTPS 简单学习

    1. HTTP缺点 使用明文通信,内容可能会被窃听: 通信加密:使用SSL和TLS: 内容加密: 不验证通信方的身份,因此可能会遭到伪装: SSL提供加密和证书: 无法证明报文的完整性,因此会遭到修改 ...