温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么用C#开发Linux守护进程

发布时间:2021-11-24 09:10:56 来源:亿速云 阅读:226 作者:iii 栏目:大数据

本篇内容主要讲解“怎么用C#开发Linux守护进程”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C#开发Linux守护进程”吧!

一,创建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守护进程”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI