今天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. 【shell】正则表达式

    当一个文件或命令输出中抽取或过滤文本时,可以使用正则表达式(RE),正则表达式是一些特殊或很不特殊的字符串模式的集合. 在Linux中grep.awk.sed均可解释正则 1.基本元字符集及其定义 ^ ...

  2. 在centos (linux) 搭建 eclipse c++开发分环境

    网上说得很多,很烦,操作了很多,总有错误,但解决方案很简单.步骤就下面几步就OK了 安装gcc .g++ yum install gcc yum install gcc-c++ 安装jdk,配置jdk ...

  3. 转载【微信小程序】:微信小程序滚动Tab选项卡:左右可滑动切换(仿某宝)

    1.本文转载至:http://blog.csdn.net/sophie_u/article/details/71745125 2.效果: 3.最终效果如上.问题: 1).tab标题总共8个,所以一屏无 ...

  4. ASP.NET 对字符串大小写切换

    来源:http://www.codeproject.com/Tips/297011/How-to-Toggle-String-Case-in-NET#alternative22 使用LINQ: pub ...

  5. PHP-PHP.INI常用配置详解

    variables_order: 假如为'GPCS'表示系统在定义PHP预定义变量时的顺序是GET,POST,COOKIES,SERVER, 此时$_ENV为空数组, 只要把'E'添加到'GPCS'后 ...

  6. springmvc json结合

    获取json数据     名字一样就获取了 user @RequestMapping("/addUser") public String addUser(User user,Htt ...

  7. C# 生成 DataMatrix 格式的二维码

    该文主要是利用OnBarcode.dll 生成 DataMatrix 格式的二维码的一些简单方法和操作技巧.关于QrBarcode的二维码比较常见和简单,网上有很多资源. 1.附件为dll 2.利用上 ...

  8. useradd或者userdel相关用户管理命令不好用

    前言 有时使用useradd或者userdel会出现如下报错: userdel: cannot open /etc/passwd 很明显是/etc/passwd文件导致的 一.查看以及改变文件状态 [ ...

  9. 《JAVA与模式》之适配器模式(转载)

    适配器模式比较简单,偷个懒,直接转载一篇. 个人理解: * 类适配器是通过继承来完成适配 * 对象适配器是通过传递对象来完成适配 * 不管哪种,其实都是通过引用特殊接口的对象来完成特殊接口的适配调用 ...

  10. 关于apache服务器加载so的报错

    早上突然发现我的虚拟机上的WEB应用访问不了了,后台检查httpd服务,无法启动,出现一行提示: ①starting httpd: httpd: Syntax error on line 163 of ...