1. 程式人生 > >Unity開發之啟動,關閉Linux裡的服務

Unity開發之啟動,關閉Linux裡的服務

最近在接觸Linux的一些東西。對於一直使用windows系統的人來說初次接觸Linux簡直頭痛到不行。還好,時間較長,自己也慢慢了解了一些。

專案現在是有客戶端,服務組成。服務其實也是客戶端的一種輔助工具,都是放在本地機器執行。需求是要在客戶端裡啟動某個服務(Java寫的)。其實原理和windows的cmd執行命令差不多。我在谷歌搜到的利用c#的Process類來啟動Linux的終端(Termianl)(這裡要稱讚下unity的跨平臺性太舒服了),然後在程式中輸入我們想要執行的命令。程式碼如下:

public static string ExecuteCommand(string command)
    {
        Process proc = new System.Diagnostics.Process();
        proc.StartInfo.FileName = "/bin/bash";
        proc.StartInfo.Arguments = "-c \" " + command + " \"";
        proc.StartInfo.UseShellExecute = false;
        proc.StartInfo.RedirectStandardOutput = true;
        proc.Start();

        while (!proc.StandardOutput.EndOfStream)
        {
            return proc.StandardOutput.ReadLine();
        }
        return "沒有資訊";
    }

我們在啟動服務函數出呼叫此函式並且輸入我們要執行的命令。這裡說下,由於我們需要關閉服務,所以我們需要記住服務的PID。所以我們在啟動服務的時候還要將改服務PID記錄到本地檔案中。由於服務放在客戶端裡,所以我就將儲存的PID檔案儲存到本地目錄下。在LINUX下用./表示當前目錄下。

 public void StartServer()
    {
        //兩個執行命令中間一定要加& 表示同時執行兩個命令 不然不會將PID記錄本地
       text.text= CmdHelper.ExecuteCommand(@"java -jar data-0.0.1-SNAPSHOT.jar --server.port=60000 & echo $! >./SNAPSHOT.pid");
        //java -jar data-0.0.1-SNAPSHOT.jar --server.port=60000 是我自己要啟動服務的命令 可忽略
    }

停止服務:

public void StopServer2()
    {
        text.text = CmdHelper.ExecuteCommand(@"PID=$(cat ./SNAPSHOT.pid)&& kill -9 $PID");
    }

我這裡在兩個命令中間使用的兩個&,表示只有獲取到PID才會執行下一個命令。我查了相關資料,不同數量的符號有不同的意思。如下:

/// 執行cmd命令
    /// 多命令請使用批處理命令連線符:
    /// <![CDATA[
    /// &:同時執行兩個命令
    /// |:將上一個命令的輸出,作為下一個命令的輸入
    /// &&:當&&前的命令成功時,才執行&&後的命令
    /// ||:當||前的命令失敗時,才執行||後的命令]]>

如果我們想檢視所有程序佔用情況,我們開啟終端,輸入:ps auxw

其中引數a表示顯示系統中所有使用者的的程序;u表示輸出程序使用者所屬資訊; x表示也顯示沒有控制檯的程序;若顯示行太長而被截斷則可以使用f引數;

希望本部落格對你有幫助。