<em id="3iliw"></em>
  • <progress id="3iliw"></progress>
  • <tbody id="3iliw"><pre id="3iliw"></pre></tbody><dd id="3iliw"><noscript id="3iliw"></noscript></dd>

    <progress id="3iliw"></progress>

    杭州.net培訓
    達內杭州.net培訓中心

    13175137725

    .NET跨平臺實踐用C#開發Linux守護進程

    • 時間:2018-05-25 14:10
    • 發布:杭州.NET培訓
    • 來源:疑難解答

    一、創建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);

    }

    ///

    /// Daemon工作狀態的主方法

    ///

    ///

    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,就能終止它的運行。

    預約申請免費試聽課

    怕錢不夠?就業掙錢后再付學費!    怕學不會?從入學起,達內定制課程!     擔心就業?達內多家實踐企業供你挑選!

    上一篇:.NET Core 3將支持Windows桌面應用
    下一篇:.NET Core實現項目自動編譯
    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    江西省

    貴州省

    廣西省

    海南省

    国拍自产亚洲 2019国拍自产在线,国拍自产亚洲,国产a在线不卡 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>