几年前,我写过两篇关于用C#开发Linux守护进程的技术文章,分别是《.NET跨平台实践:用C#开发Linux守护进程.NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

这就是本文的初衷。

关于Linux Daemon程序的原理之类的,已经在之前的两篇文章中得到了一些表现,因此,本文就直接上代码,不再在高大上的理论中去兜圈子了。

using System;
using System.Threading;
using System.Timers;
using System.Runtime.InteropServices;
using System.IO;
using System.Text;/************************************************* .Net Core/.Net5+ Linux Daemon示例,作者宇内流云 ************************************************/namespace daemon
{class Program{static unsafe void Main(string[] args){// 进入守护状态int pid = fork();if (pid != 0) exit(0);setsid();pid = fork();if (pid != 0) exit(0);umask(0);// 关闭所有打开的文件描述符int fd_nul = open("/dev/null", 0);for (var i = 0; i <= fd_nul; i++){if (i < 3)Dup2(fd_nul, i);elseclose(i);}// 进入主方法            // (本示例的功能很简单,就是定时向某个文件写入点内容)            DaemonMain(args);}/// <summary>/// Daemon工作状态的主方法/// </summary>/// <param name="aargs"></param>static void DaemonMain(string[] aargs){//启动一个线程去处理一些事情(new Thread(DaemonWorkFunct) { IsBackground = true }).Start();//daemon时,控制台输入、输出流已经关闭// 因此,请不要再用Console.Write/Read等方法//阻止daemon进程退出(new AutoResetEvent(false)).WaitOne();}static FileStream fs;static int count = 0;static void DaemonWorkFunct(){try{fs = File.Open(Path.Combine("/tmp", "daemon.txt"), FileMode.OpenOrCreate);}catch{exit(1);return;}var t = new System.Timers.Timer() { Interval = 1000 };t.Elapsed += OnElapsed;t.Start();}private static void OnElapsed(object sender, ElapsedEventArgs e){var s = DateTime.Now.ToString("yyy-MM-dd HH:mm:ss") + "\n";var b = Encoding.ASCII.GetBytes(s);fs.Write(b, 0, b.Length);fs.Flush();count++;if (count > 100){fs.Close();fs.Dispose();exit(0);}}[DllImport("libc", SetLastError = true)]static extern int fork();[DllImport("libc", SetLastError = true)]static extern int setsid();[DllImport("libc", SetLastError = true)]static extern int umask(int mask);[DllImport("libc", SetLastError = true)]static extern int open([MarshalAs(UnmanagedType.LPStr)] string pathname, int flags);[DllImport("libc", SetLastError = true)]static extern int close(int fd);[DllImport("libc", SetLastError = true)]static extern int exit(int code);[DllImport("libc", EntryPoint = "dup2", SetLastError = true)]static extern int Dup2(int oldfd, int newfd);}
}

以上代码就是Linux环境中,.NetCore或.Net5以上版本的.net程序,以纯代码方式使自身成为标准的Linux守护进程的示例代码,你完全可以将它关键部分借用到自己的真实项目中。使用中如果有什么问题或建议,请加入本人的QQ群作进一点交流。

注:本文为 宇内流云 (邮箱:j66x@163.com)原创作品,用c#开发原生的Linux守护进程相关技术及代码亦属本人首发,如需转载,请注明出处和作者,同时,没有得到本人亲自同意,本文关键代码不得被“借鉴”到其他纸质作品中

.NET跨平台实践:.NetCore、.Net5/6 Linux守护进程设计相关推荐

  1. .NET跨平台实践:再谈用C#开发Linux守护进程 — 完整篇

    Linux守护进程是Linux的后台服务进程,相当于Windows服务,对于为Linux开发服务程序的朋友来说,Linux守护进程相关技术是必不可少的,因为这个技术不仅仅是为了开发守护进程,还可以拓展 ...

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

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

  3. Linux守护进程实现

    Linux守护进程 redis版: void daemonize(void) {int fd;if (fork() != 0) exit(0); /* parent exits */setsid(); ...

  4. Linux 命令详解(六)Linux 守护进程的启动方法

    Linux 守护进程的启动方法 http://www.ruanyifeng.com/blog/2016/02/linux-daemon.html

  5. 深入理解Linux守护进程

    深入理解Linux守护进程Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daem ...

  6. Linux守护进程的创建(结合nginx框架)

    Linux守护进程的创建(结合nginx框架) 先介绍几个相关函数: int dup2(arg1,arg2):参数一指向的内容赋给参数二,shi的参数二也能访问参数一所指向的内容,并返回新的描述符 i ...

  7. linux+守护进程+php,【转载】Linux 守护进程的编程方法

    [转载]Linux 守护进程的编程方法 原文见: http://www.linuxdevelop.org/tingxx/show.php?table=c&id=3 Linux 守护进程的编程方 ...

  8. linux 守护进程_网络工程师之linux守护进程

    Linux守护进程就是通常所说的DEAMON进程,linux后台服务多种多样,每一个服务都运行一个对应的程序,这些后台程序对应的进程就是守护进程.系统中可以看到很多如DHCPD和HTTPD之类的进程, ...

  9. 【Linux】Linux 守护进程的启动方法

    转载:Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 W ...

最新文章

  1. android onpause时动画出错,Android生命周期之onPauseonStop
  2. JavaScript-4.2函数,变量作用域---ShinePans
  3. SimpleExecutor.doQuery()-创建Statement
  4. FPGA设计的基础流程
  5. .NET中国峰会 参与意愿调查
  6. 惠普打印机节能环保认证证书_低成本高效办公 苏宁惠普超品日这几款打印机了解下!...
  7. 官方认证:软件及信息技术从业者为新生代农民工
  8. web.xml里,classpath使用范围
  9. java selenium click_按钮单击selenium java
  10. 搞深度学习如何快速读懂开源代码?
  11. 博弈论数据可用性声明_手机数据恢复,低调使用~
  12. 第五回 人似秋鸿来有信,事如春梦了无痕
  13. 成都Uber优步司机奖励政策(3月2日)
  14. 贷款用户逾期问题Task1
  15. TestCenter测试管理工具功能详解一(F)
  16. 手机总是耗电太快,怎么办?
  17. Cloudflare发布全球最快的DNS
  18. C语言startup()函数,WSAStartup()函数以及DLL的加载
  19. ArcGIS如何利用矢量shp挂接图片
  20. 瑞星个人防火墙2012

热门文章

  1. 数据仓库的 RDBMS 性能优化指南
  2. 密码可逆不可逆选择_膝关节损伤不可逆!跑步要注意!
  3. sudo 安装 常见错误
  4. 最全的正则表达式大全
  5. 移动web开发适配rem
  6. Python集合和函数
  7. BZOJ 4516: [Sdoi2016]生成魔咒 [后缀自动机]
  8. 剑指offer编程题Java实现——面试题3二维数组中的查找
  9. [poj2446]Chessboard
  10. Linux文件系统基础(1)