delphi 10.2 支持linux, 而且官方只是支持命令行编程,目地就是做linux 服务器端的开发。

既然是做linux服务器端的开发,那么普通的命令行运行程序,然后等待开一个黑窗口的方式就

太low了(目前就有个别语言大咖,经常在Windows 上开个黑窗口,看起来非常恶心),那么如果

避免这个尴尬的问题?

其实Linux 下也有类似windows 服务的功能,Linux Daemon 就是其中的一种方式,命令行运行后

直接返回,同时在后台建立一个同样的进程。接受客户端的访问。常见的一些linux 服务基本上都是

这样工作的。例如著名apache,mysql 等。具体的linux Daemon 的介绍,请参照本篇文章

今天我们就使用delphi 来开发一个后台的http server, 来说明delphi 如何开发linux 的Daemon.

新建工程,建一个控制台应用。

因为这个只能在linux 运行,所以直接加入linux 支持。

因为我们要做http server, 要放一些控件,因此再加一个datamodule.

然后在datamodule 上放一个Tidhttpserver 控件。

在oncommandget 里面加入以下事件。

procedure Tdmf.IdHTTPServer1CommandGet(AContext: TIdContext;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
AResponseInfo.ContentText:='I am delphi for linux service';
end;

好了。

我们回到工程文件

输入以下代码

program Project2;

{$APPTYPE CONSOLE}

{$R *.res}
uses
Posix.Unistd,
Posix.SysTypes,
System.SysUtils,
dmp in 'dmp.pas' {dmf: TDataModule}; procedure daemon; begin dmf:=Tdmf.Create(nil);
dmf.IdHTTPServer1.Active:=True; try repeat sleep( * ); until False; finally
dmf.Free;
end; end; var
pid: pid_t; begin
pid := fork;
if pid = then
begin
writeln('starting service');
daemon;
end; end.

编译运行。

首先我们看一下系统中的运行进程: ps -ef

里面没有Project2 的任何信息。

我们运行这个程序

运行完后,程序立即就返回了

我们在看看系统进程里面的情况

我们可以看见这个Project2 依然在进程中。

那么这个进程是否可以正常工作呢?

我们打开浏览器,看看情况如何?

可以看见这个这个程序在后面运行的非常正常。

当然了,由于这是一个demo, 我没有做太多的处理,其实由于daemon 进程无法与前台直接交互,我们以后写这种应用时。

应该多用 日志 文件来记录运行情况,一般出问题时,能够快速的找到问题的根源。

那么这个程序一直在后台运行,我们再次编译和发布时,就没办法覆盖了,怎么关掉这个后台进程呢?

办法很简单,也很粗暴(反正我喜欢)。

使用linux 的kill 命令。

找到该应用的pid, 直接干掉

然后使用ps -ef 看看

Project2 已经不在了,整个世界清静了。

使用delphi 10.2 开发linux 上的Daemon的更多相关文章

  1. 使用delphi 10.2 开发linux 上的webservice

    前几天做了linux下apache的开发,今天做一个linux 下的webservice ,以供客户端调用. 闲话少说,直接干. 新建一个工程.选other...,选择如图. 继续输入服务名 然后就生 ...

  2. .NET跨平台实践:用C#开发Linux守护进程-Daemon

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  3. DELPHI 10 SEATTLE 在OSX上安装PASERVER

    旧版本的DELPHI在安装目录下里的PASERVER目录有安装文件,但奇怪在这个SEATTLE上的PASERVER目录下只有一个EXE程序的安装程序​​,显然不能安装到OSX里,需要在Embarcad ...

  4. DELPHI开发LINUX的动态库

    DELPHI开发LINUX的动态库 WINDOWS的动态库是.dll,这个大家都知道. LINUX也有动态库,扩展名是.so,现在DELPHI也能开发LINUX的动态库哦. DELPHI对LINUX的 ...

  5. Delphi 10 Seattle 小票打印控件TQ_Printer

    TQ_Printrer控件,是一个为方便需要控制打印命令而设计的跨平台专用控件,已包含标准ESC/POS打印控制的基本指令在内(这些基本指令已能很好的满足多数项目使用). TQ_Printrer控件让 ...

  6. DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境

    DELPHI 10.2 TOKYO搭建LINUX MYSQL开发环境 笔者使用ubuntu64位LINUX 首先必须保证LINUX可以连互联网. 安装MYSQLsudo apt-get update ...

  7. Delphi 10.2可以开发Linux桌面应用了

    原始地址 https://community.embarcadero.com/blogs/entry/firemonkey-on-linux    Delphi Linux编译器已经发布,现在无需等待 ...

  8. Delphi 10.2 Linux 程序开发环境部署的基本步骤(网络连接方式要选择桥接或者是Host Only)

    Delphi 10.2 Linux 程序开发环境部署的基本步骤 http://blog.qdac.cc/?p=4477 升級到 Delphi 10.2 Tokyo 笔记http://www.cnblo ...

  9. Delphi 10.2的 更新说明,所有官方资料:新特征和Bugfix列表,所有工具开发说明

    TMS东京版控件更新情况http://www.tmssoftware.com/site/radstudio10_2tokyo.asp RAD Studio 10.2 更新说明http://blog.q ...

随机推荐

  1. cf-Round551-Div2-C. Serval and Parenthesis Sequence(贪心)

    题目链接:http://codeforces.com/contest/1153/problem/C 题意:给定由'(',')','?'组成的字符串,问是否能将其中的?全部换成'(‘,’)'使得字符串的 ...

  2. pta l2-7(家庭房产)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805068539215872 题意:给定n个人的信息,包括其编号 ...

  3. TOJ4127: Root of String

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4127 4127: Root of ...

  4. <asp:Button点击查询后,调用js中函数展现加载圈

    <div> <div id='paneloading' style='display:none;position:fixed;top:0px;left:0px;z-index:999 ...

  5. oracle数据库导入导出问题

    场景描述: 1.做一个从UAT到PRD的Schema迁移,UAT环境有sys用户,PRD环境没有sys用户,由于权限限制,没办法使用expdp/impdp,只好选择exp/imp命令: 2.UAT和P ...

  6. sql查询 !='' 和 is not null的区别

    select * from table where a is not null 会把有内容的和内容为空的都查出来而select * from table where a != '' 只会把有内容的查出 ...

  7. 绝对路径${pageContext.request.contextPath}

    ${pageContext.request.contextPath}用于解决使用相对路径时出现的问题,它的作用是取出所部署项目的名字. 如图,${pageContext.request.context ...

  8. java_11接口

    1接口的概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”. 接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  9. 6-完美解决Error:SSL peer shut down incorrectly

    转载自: 完美解决Error:SSL peer shut down incorrectly 打开gradle文件夹下的gradle-wrapper文件 修改其中的配置文件将红色区域修改为http:// ...

  10. ios简单国际化

    1.在PROJECT中Info得Localizations中添加语言 2.新建Localizable.strings(一定是这个文件名),在右侧属性栏的Localization中勾选出你需要的语言 3 ...