Unity开发之启动,关闭Linux里的服务

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33994566/article/details/85002040

最近在接触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参数;

希望本博客对你有帮助。

猜你喜欢

转载自blog.csdn.net/qq_33994566/article/details/85002040