今天QA部门需要进行Performance测试,因为跑job的时间会很长,下班也跑不完。所以想要做一个job运行完毕自动关机的工具。

原理就是检查进程的名称,如果检查不到相应的进程,就说明job已经跑完了,可以关机了。

下图是我做的自动关机工具,选择相应的进程名(这里选择job的进程名),点击OK之后窗体会隐藏,在后台监控进程状态:

程序实例只能运行一个,禁止多个实例同时运行,如果后台已经存在实例,再点击打开工具会提示:

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics; namespace AutoShutDown
{
public partial class MainForm : Form
{
public MainForm()
{
//MessageBox.Show(Process.GetCurrentProcess().ProcessName.ToString());
//Only one instance can run at the same time.
Process[] tylan = Process.GetProcessesByName("AutoShutDown");
if (tylan.Count() > )
{
MessageBox.Show("Sorry, the instance of this program has already run on this computer. You can not run it again.");
System.Diagnostics.Process.GetCurrentProcess().Kill();
}
InitializeComponent();
AddProcesses();
} private void AddProcesses()
{
var processes = System.Diagnostics.Process.GetProcesses();
foreach (var process in processes)
{
Processes.Items.Add(process.ProcessName.ToString());
}
} private void Processes_SelectedIndexChanged(object sender, EventArgs e)
{
Processes.Text = Processes.SelectedItem.ToString();
} private void OKButton_Click(object sender, EventArgs e)
{
//Check if the process has been selected.
if (Processes.Text == "")
{
MessageBox.Show("Please select a process first.");
}
else
{
//Check the process's status every 5 miniutes.
System.Timers.Timer tmr = new System.Timers.Timer(5000);
tmr.Elapsed += new System.Timers.ElapsedEventHandler(CheckProcess);
tmr.AutoReset = true;
tmr.Enabled = true;
this.Hide();
}
} private void CheckProcess(object source, System.Timers.ElapsedEventArgs e)
{
int numOfTheProcesses = ;
var processes = System.Diagnostics.Process.GetProcesses();
foreach (var process in processes)
{
string TheProcessName = "";
if (Processes.InvokeRequired)
{
Processes.Invoke(new MethodInvoker(delegate { TheProcessName = Processes.Text; }));
}
if (process.ProcessName == TheProcessName)
{
//Find the objective process.
//MessageBox.Show(TheProcessName);
numOfTheProcesses++;
}
}
if (numOfTheProcesses == )
{
//No such process, shut down the computer.
MessageBox.Show("The computer is ready to be shut down.");
//Shut down the comp
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "cmd.exe";
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.RedirectStandardInput = true;
myProcess.StartInfo.RedirectStandardOutput = true;
myProcess.StartInfo.RedirectStandardError = true;
myProcess.StartInfo.CreateNoWindow = true;
myProcess.Start();
myProcess.StandardInput.WriteLine("shutdown -s -t 0");
}
}
}
}

其中橘黄色字体部分为关机代码,红色字体部分为每五秒钟执行一次ChecProcess方法,每五秒检查一次进程是否存在,如果不存在了,就关机。

用C#写一个实现进程监控的自动关机工具的更多相关文章

  1. 写一个python脚本监控在linux中的进程

    在虚拟机中安装Linux中的CentOS7系统 https://baijiahao.baidu.com/s?id=1597320700700593557&wfr=spider&for= ...

  2. 无监控不运维——使用 Python 写一个小小的项目监控

    在公司里做的一个接口系统,主要是对接第三方的系统接口,所以,这个系统里会和很多其他公司的项目交互.随之而来一个很蛋疼的问题,这么多公司的接口,不同公司接口的稳定性差别很大,访问量大的时候,有的不怎么行 ...

  3. Python运维三十六式:用Python写一个简单的监控系统

    市面上有很多开源的监控系统:Cacti.Nagios.Zabbix.感觉都不符合我的需求,为什么不自己做一个呢? 用Python两个小时徒手撸了一个简易的监控系统,给大家分享一下,希望能对大家有所启发 ...

  4. 用python 写一个nagios插件 监控http内容(转载)

     nagios自带的http-check插件主要是检测地址url是否可以访问,在web+中间件的架构中容易出现url能访问,但是后台中间件拓机的情况,因为最近在自学python,所以写了个脚本检测ur ...

  5. 写一个Windows上的守护进程(1)开篇

    写一个Windows上的守护进程(1)开篇 最近由于工作需要,要写一个守护进程,主要就是要在被守护进程挂了的时候再把它启起来.说起来这个功能是比较简单的,但是我前一阵子写了好多现在回头看起来比较糟糕的 ...

  6. 写一个TODO App学习Flutter本地存储工具Moor

    写一个TODO App学习Flutter本地存储工具Moor Flutter的数据库存储, 官方文档: https://flutter.dev/docs/cookbook/persistence/sq ...

  7. 多进程监控自动关机工具升级远程关闭多台server——C# works with PowerShell

    之前给单位做过一个多进程监控的自动关机工具,详见那篇blog. 这次领导又加了需求,说要等进程监控结束后,不止需要关闭主控端server,还需要关闭其他servers.于是就用到了我上篇文章所介绍的知 ...

  8. [Erlang13]怎么把一个普通的进程挂入Supervisor监控树?

    简单来说:应该是在调用的start_link返回一个{ok,Pid}就可以把这个进程放入监控树Supervisor里面: -module(worker). -author("zhongwen ...

  9. 分享自己做的一个指定进程以及线程长时间cpu监控的工具

    前言: 前面给大家分享过一个工作中用到的编译拷贝脚本,其实工作中还有一些其他工具的使用,今天再来分享一个自己纯手工的CPU监控的脚本.大家可以结合上篇文章与本篇文章一起学习shell. 主要实现功能: ...

随机推荐

  1. SettingsNotePad++

      迁移时间:2017年5月20日11:04:46Author:Marydon官网下载 http://notepad-plus.en.softonic.com/1.修改字体大小及背景色 设置--> ...

  2. DIY手机万能红外遥控器

    DIY手机万能红外遥控器 1.手机安装软件:遥控精灵 2.红外二极管两个(旧的遥控器里面可以拆) 3.耳机的插头一个 步骤:首选讲两个二极管的正负相接(即a二极管的正极连接b二极管的负极,a二极管的负 ...

  3. 21、java中和日期相关的类

    一.Data及其常用API 1.简介 Java中的时间使用标准类库的java.util.Date,其表示特定的瞬间,精确到毫秒.是用距离一个固定时间点的毫秒数(可正可负,long类型)表达一个特定的时 ...

  4. 文本挖掘之文本聚类(MapReduce)

    刘 勇  Email:lyssym@sina.com 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是 ...

  5. elasticsearch5.4体验

        Elasticsearch是基于Lucene分布式.实时查询的搜索分析引擎.我目前应用在日志集中化处理上... 01.下载elasticsearch5.4 https://www.elasti ...

  6. 转载【小程序】: 微信小程序开发---应用与页面的生命周期

    App App() App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. object参数说明: 属性 类型 描述 触发时机 onLaunch Functi ...

  7. Xshell和Xftp5配置连接阿里云服务器

    配置Xftp5 配置成功后 配置Xshell 记住用户名和密码 连接成功

  8. Ajax Control Toolkit 34个服务器端控件的使用

    摘自:http://blog.csdn.net/yaoshuyun/article/details/2218633 1. Accordion[功能概述] Accordion可以让你设计多个panel  ...

  9. hduoj------确定比赛名次

    拓扑排序结合代码的完整理解 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  10. android studio 中出现"...ProjectScript\buildscript\cache.properties.lock"

      Owner PID: unknownOur PID: 8496Owner Operation: unknownOur operation: Initialize cacheLock file: C ...