【轉】在 Delphi 中創建 Linux 守護程序(服務進程)


轉自波哥的譯文,必須轉過來,太有價值了!原文地址在這里。以下為原文內容:

 本文譯自 原文鏈接,語言上做了精煉和排版的變更,以便更簡潔明了。

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()<>0 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 定義。具體就參考相應的文檔配置就可以了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM