首页 > 系统相关 >C# 守护控制台进程(process)

C# 守护控制台进程(process)

时间:2024-01-29 09:13:59浏览次数:30  
标签:CameraInfo C# System process camera new using 控制台 public

C#通过Process和list配合不断检测进程并重启该进程

使用语言:C#

环境:.net Framework 4.6.1 (当前使用) (貌似支持所有环境,我就不多说了)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace process_monitor
{
    class Program
    {
        static List<ProcessInfo> listProcess = new List<ProcessInfo>();
        static void Main(string[] args)
        {
            CameraInfo camera = new CameraInfo();
            CreateProcess(camera);

            Thread thread = new Thread(Ccout);
            thread.IsBackground = true;
            thread.Start();
            while (true)
            {

            }
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="camera"></param>
        private static void CreateProcess(CameraInfo camera)
        {
            //启动这个进程
            var decodeProcess = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    //Environment.CurrentDirectory 这个是获取本应用程序的路径
                    FileName = Environment.CurrentDirectory + "\\Jt.exe",
                    //带过去的参数
                    UseShellExecute = false,
                    RedirectStandardInput = false,
                    RedirectStandardOutput = false,
                    RedirectStandardError = false,
                    CreateNoWindow = true
                }
            };
            decodeProcess.Start();
            //进程信息所在
            ProcessInfo processInfo = new ProcessInfo()
            {
                processId = decodeProcess.Id,
                cameraInfo = camera
            };
            //添加进程信息
            listProcess.Add(processInfo);

        }

        public static void Ccout()
        {
            while (true)
            {
                Thread.Sleep(5000);
                try
                {
                    //获取所有叫jt进程内的信息
                    Process[] processIdAry = Process.GetProcessesByName("Jt");
                    //循环我们的信息
                    foreach (var oneProcess in listProcess)
                    {
                        //如果我们这个ID程序在我们都Pid中出现
                        if (processIdAry.Where(n => n.Id == oneProcess.processId).Count() > 0)
                        {
                            Console.WriteLine($"{DateTime.Now} 程序运行正常");
                        }
                        else
                        {

                            Console.WriteLine("一个进程中断,正在执行重启任务");
                            listProcess.Remove(oneProcess);
                            //获取带过去的参数
                            CameraInfo camera = oneProcess.cameraInfo;
                            //重启这个进程
                            CreateProcess(camera);
                            Console.WriteLine("重启成功");
                        }
                    }
                }
                catch (Exception)
                {

                }
            }
        }
    }

    public class CameraInfo
    {
        public Guid id { get; set; }
        public string name { get; set; }
    }
    public class ProcessInfo
    {
        public int processId { get; set; }
        public CameraInfo cameraInfo { get; set; }
    }
}
一般都是一个服务来的,只是我这样更加容易理解原理,守护服务在百度一搜就能收到,以后我再更新服务的。

标签:CameraInfo,C#,System,process,camera,new,using,控制台,public
From: https://www.cnblogs.com/valu/p/17993769

相关文章

  • 在K8S中,Service类型有哪些?
    在Kubernetes(简称K8s)中,Service是定义访问Pod的一种抽象方法,它提供了负载均衡和网络代理功能。以下是KubernetesService的几种主要类型:ClusterIP(默认类型)创建一个仅集群内部可以访问的虚拟IP。通过这个IP地址,Kubernetes会将流量路由到与Service关联的一组Pod。这种类型......
  • 事务提交之后再执行某些操作 → 引发对 TransactionSynchronizationManager 的探究
    开心一刻昨晚,小妹跟我妈聊天小妹:妈,跟你商量个事,我想换车,资助我点呀妈:哎呀,你那分扣的攒一堆都够考清华的,还换车资助点,有车开就不错了小妹:你要是这么逼我,别说哪天我去学人家傍大款啊妈:哎呀妈,你脸上那褶子比你人生规划都清晰,咋地,大款缺地图呀,找你?小妹:......
  • P8392 BalticOI 2022 Day1 Uplifting Excursion
    P8392BalticOI2022Day1UpliftingExcursion贪心加动规,好题,这两个甚至完全相反的东西可以融进一道题……思路物品较少,贡献较小,体积较小,但总体积巨大。直接上\(dp\)容易把心态搞炸。我们可以先考虑贪心,使贡献最多还剩\(m\)。然后考虑背包填满剩下的体积,且\(i\)和\(-i......
  • CF1891F
    Div2F放这个,有点奇异搞笑了。不难发现一个节点的权值完全取决于他所有祖先节点在这个节点放置之后的操作。通过dfs,我们可以维护从根节点到当前节点这条链的所有操作,我们只关心在这个节点放置后的操作,于是在操作二时可以这样:在某个数组中第\(sz\)个位置加上\(v\)。那么这个......
  • C 数组形参会退化成指针
    数组形参会退化成指针,指向数组的第一个元素。#include<stdio.h>voidShowBooksName(char*names[],intlen){for(inti=0;i<len;++i){puts(names[i]);}}voidTestSizeOf(char*books[]){//数组形参退回成指针,指向数组中的第一个元素......
  • 从 WebStorm 转到 VSCode!使用一周体验报告
    前言最近我的Jetbrains开源项目授权到期了,想要续订的时候发现Jetbrains提高了开源项目申请门槛,我的StarBlog项目因为名字里包含blog这个词无法申请,虽然我在github上有很多开源项目,但年底比较忙,疏于更新,一时间竟然找不到一个满足jetbrains要求(近三个月内每月都有commi......
  • 『Echarts』简介
    目录一、前言二、『Echarts』简介1.什么是『Echarts』三、数据可视化四、『Echarts』1.『Echarts』的作用2.『Echarts』能绘制哪些图表3.『Echarts』显示图表的原理五、总结一、前言本篇文章是『Echarts』系列文章的第1篇,主要介绍『Echarts』简介经过前面文章的介绍,大......
  • Apache Paimon:Streaming Lakehouse is Coming
    摘要:本文整理自阿里云智能开源表存储负责人,FounderofPaimon,FlinkPMC成员李劲松(花名:之信)、同程旅行大数据专家,ApacheHudi&PaimonContributor吴祥平、汽车之家大数据计算平台负责人邸星星、联通数科大数据高级技术专家,ApachePaimonContributor王云朋在FlinkForwardAsi......
  • CF337E Divisor Tree
    题意简述定义DivisorTree为一棵树:叶子上的数为质数。非叶子上的数为其所有儿子上的数的乘积。给定\(n\)个数\(a_i\),你需要让每个\(a_i\)都在DivisorTree上出现,并最小化DivisorTree的节点数量。\(n\le8,a_i\le10^6\)。分析显然DivisorTree上只能有质数......
  • C. Did We Get Everything Covered
    原题链接前情提要限于自身知识水平的储备不足,无法对这道题的贪心算法做出一个证明,待来日学识渐长把这个证明写下题解我们可以把字符串s分成若干区间,每一区间对应一位数字的储备已知长度为n,那我们就一位一位地遍历,一旦所有元素遍历齐就开始下一位的遍历,因为再往后遍历也不起作......