使用delphi 10.2 开发linux 上的Daemon

简介: delphi 10.2 支持linux, 而且官方只是支持命令行编程,目地就是做linux 服务器端的开发。 既然是做linux服务器端的开发,那么普通的命令行运行程序,然后等待开一个黑窗口的方式就 太low了(目前就有个别语言大咖,经常在Windows 上开个黑窗口,看起来非常恶心),那么如果 避免这个尴尬的问题?     其实Linux 下也有类似windows 服务的功能,Linux Daemon 就是其中的一种方式,命令行运行后 直接返回,同时在后台建立一个同样的进程。

   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(10 * 1000);

    until False;

  finally
   dmf.Free;
  end;

end;

var
   pid: pid_t;

begin
  pid := fork;
  if pid = 0 then
   begin
    writeln('starting service');
     daemon;
   end;

end.

编译运行。

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

里面没有Project2 的任何信息。

我们运行这个程序

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

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

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

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

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

 

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

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

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

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

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

使用linux 的kill 命令。

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

然后使用ps -ef 看看

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

 

目录
相关文章
|
5天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
21天前
|
Linux API C语言
FFmpeg开发笔记(一)搭建Linux系统的开发环境
本文指导初学者如何在Linux上搭建FFmpeg开发环境。首先,由于FFmpeg依赖第三方库,可以免去编译源码的复杂过程,直接安装预编译的FFmpeg动态库。推荐网站<https://github.com/BtbN/FFmpeg-Builds/releases>提供适用于不同系统的FFmpeg包。但在安装前,需确保系统有不低于2.22版本的glibc库。详细步骤包括下载glibc-2.23源码,配置、编译和安装。接着,下载Linux版FFmpeg安装包,解压至/usr/local/ffmpeg,并设置环境变量。最后编写和编译简单的C或C++测试程序验证FFmpeg环境是否正确配置。
37 8
FFmpeg开发笔记(一)搭建Linux系统的开发环境
|
1月前
|
存储 缓存 Linux
探秘Linux块设备驱动程序:成为内核开发大师的第一步
探秘Linux块设备驱动程序:成为内核开发大师的第一步
93 0
|
1月前
|
Linux
linux驱动开发-点亮第一个led灯
linux驱动开发-点亮第一个led灯
23 0
|
1月前
|
网络协议 Java Linux
Java 开发常用的 Linux 命令知识积累
Java 开发常用的 Linux 命令知识积累
38 0
|
1月前
|
网络协议 Ubuntu Linux
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
130 0
|
2月前
|
Linux 芯片 开发者
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)
167 0
Linux 驱动开发基础知识——内核对设备树的处理与使用(十)
|
5天前
|
机器学习/深度学习 缓存 监控
linux查看CPU、内存、网络、磁盘IO命令
`Linux`系统中,使用`top`命令查看CPU状态,要查看CPU详细信息,可利用`cat /proc/cpuinfo`相关命令。`free`命令用于查看内存使用情况。网络相关命令包括`ifconfig`(查看网卡状态)、`ifdown/ifup`(禁用/启用网卡)、`netstat`(列出网络连接,如`-tuln`组合)以及`nslookup`、`ping`、`telnet`、`traceroute`等。磁盘IO方面,`iostat`(如`-k -p ALL`)显示磁盘IO统计,`iotop`(如`-o -d 1`)则用于查看磁盘IO瓶颈。
|
2天前
|
监控 Linux Windows
50个必知的Linux命令技巧,你都掌握了吗?(下)
50个必知的Linux命令技巧,你都掌握了吗?(下)
|
2天前
|
Linux Shell Windows
Linux 常用基本命令
Linux 常用基本命令