相关推荐:[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)

[.net 面向对象程序设计深入](5)MVC 6 —— 构建跨平台.NET开发环境(Windows/Mac OS X/Linux)1.关于跨平台上篇中介绍了MVC的发展历程,说到ASP.NET 5.0之后更名为ASP.NET Core 1.0,同样MVC 6.0也是运行在它之下。我们要进行开发和部署基于MVC 6.0的

Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作。一句话,为Linux开发与控制台无关的,需要在后台长时间不间断运行的“服务程序”,Daemon技术是非常重要的。Daemon程序一般用c/c++开发。不过,我今天要讲的,不是怎么用c/c++开发daemon,而是用C#!一,创建Daemon程序:用VS新建一个控制台项目,假设名称是MyDaemon,输入下边的代码:using System.Runtime.InteropServices;using System.Threading;namespace MyDaemon{

class Program

{

static void Main(string[] args)

{

int pid = fork();

if (pid != 0) exit(0);

//设置“会话组长”,与父进程脱离

setsid();

pid = fork();

if (pid != 0) exit(0);

//已经进程“守护进程”工作状态了!

//关闭所有打开的文件描述符

int max = open("/dev/null", 0);

for (var i = 0; i <= max; i++) { close(i); }

//重设文件掩模

umask(0);

//执行你的程序过程

DaemonMain(args);

}

/// <summary>

/// Daemon工作状态的主方法

/// </summary>

/// <param name="aargs"></param>

static void DaemonMain(string[] aargs)

{

//你的工作代码...

//daemon时,控制台输入输出流已经关闭

//请不要再用Console.Write/Read等方法

//阻止daemon进程退出

while (true)

{ Thread.Sleep(1000); }

}

[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);

}}然后编译为 MyDaemon.exe。二,部署和运行:.net 程序在linux运行,一般都会使用mono这个.net框架,不过,为了简单方便,我这里使用 AnyExec来运行这个程序(关于AnyExec,请参阅:不装mono,你的.NET程序照样可以在Linux上运行!)。1,把 MyDeamon.exe放到anyexec的app文件夹;2,把 "any"这个程序复制为 MyDeamon;3,运行:见证神奇的时间到了!请你在linux控制终端上输入: ./MyDaemon,哈哈,怎么没有反应? 其实,不是没有反应,是你这个 MyDaemon程序已经在后台跑起来了!输入 “ps -ef”,看看!看到那个 MyDaemon了吧!这次运行的PID是11618,父进程是的PID是1,1是谁?linux init!4,退出daemon程序:daemon程序不会与控制台输入输出进行交互,所以,用Console.ReadLine之类的方法控制进程的退出是不现实的。那么,怎么关闭这个在后台运行的 daemon呢? 最简办法就是用ps -ef查出这个进程的PID号,然后用kill命令终止它。比如当前运行的这个 mydaemon的PID号是 11618,你只需要输入 kill -9 11618,就能终止它的运行。(本文为宇内流云原创,经查,暂没发现网上有类似的技术文章,欢迎转载) 

相关推荐:C#开发Linux守护进程

Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作。一句话,为Linux开发与控制台无关的,需要在后台长时间不间断运行的“服务程序”,Daemon

快照源:http://www.cnblogs.com/yunei/p/5352944.html