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

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

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.微服务项目【学成在线】_day04 页面静态化_18-页面静态化-模板管理-GridFS研究-取文件

    需要创建mongoDB的配置类1 配置类里面主要创建.GridFSBucket这个对象.这个对象的作用就是用来打开一个下载流 在cms的微服务下,在config下创建MongoConfig.这个时候就 ...

  2. Response 与 Cookie

    Response 与 Cookie Web服务器要完成的任务的最后一步就是向客户端返回数据.如果客户端是浏览器,那么返回的数据通常是HTML.JS.CSS或者其他类型的代码. Cookie是保存在客户 ...

  3. 【leetcode】506. Relative Ranks

    problem 506. Relative Ranks solution1:使用优先队列: 掌握priority_queue 和 pair的使用: class Solution { public: v ...

  4. SpringCloud 与 Dubbo区别

    总览   Dubbo SpringCloud 服务注册中心 Zookeeper Spring Cloud Netfix Eureka 服务调用方式 RPC REST API 服务监控 Dubbo-mo ...

  5. 【计算机视觉】深度相机(六)--Kinect v2.0 手势样本库制作

    目录为1.如何使用Kinect Studio录制手势剪辑:2.如何使用Visual Gesture Builder创建手势项目:3.如何在我的C#程序中使用手势:4.关于录制.剪辑手势过程中的注意事项 ...

  6. 最新 鹏博士java校招面经 (含整理过的面试题大全)

    从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.鹏博士等10家互联网公司的校招Offer,因为某些自身原因最终选择了鹏博士.6.7月主要是做系统复习.项目复盘.LeetCo ...

  7. 编写一个自定义事件类,包含on/off/emit/once方法

    function Event() { this._events = {}; } Event.prototype.on = function(type, fn) { if (!this._events[ ...

  8. 记:linux服务器启动重启WEB项目启动成功,长时间卡住未响应

    问题 云服务器部署web项目,每次正常启动项目后访问页面很久才能有响应,一直卡在INFO: Deploying web application directory ......长达几分钟以上,极度影响 ...

  9. Guava 工具类之joiner的使用

    joiner主要用于对字符串的连接,也可用于对map中key value的连接 public class JoinerTest { private static final List<Strin ...

  10. 【Funny Things】002——鞋的颜色

    网上的那张鞋子的图片到底是什么颜色的?灰绿色还是粉色? 1. 先截取图片中鞋的那块的图片,获取大小 2. 带入大小分别计算R,G,B平均值 3. 通过计算所得的数据画图可得结果 from PIL im ...