今天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. SettingsEditplus

      迁移时间:2017年5月20日10:51:51Author:Marydon官网下载 http://www.editplus.com/设置一 1.修改字体大小及背景色 首选项-->Genera ...

  2. struts2接收参数的几种形式

    1.使用属性 HTML: <form action="login" method="post" name="form1"> 用户 ...

  3. PHP中的密码加密的解决方案

    层出不穷的类似事件对用户会造成巨大的影响,因为人们往往习惯在不同网站使用相同的密码,一家“暴库”,全部遭殃 一般的解决方案 1.将明文密码做单向hash $password = md5($_POST[ ...

  4. django和mysql

    一.在python2中使用mysql django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No mod ...

  5. Windows最常用的网络命令精萃

    最常用的网络命令精萃   ★ping  它是用来检查网络是否通畅或者网络连接速度的命令.作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:网络 ...

  6. Python学习笔记015——文件file的常规操作之一(文本文件)

    1 什么是文件 文件是用于数据存储的单位 文件通常用来长期保存数据 读写文件是最常见的I/O操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件的功能都是由操作系统提供的,一般而言,操 ...

  7. AP_应付模组在月结的处理

    2014-06-04 Created By BaoXinjian 1. 完成所有交易及检查Interface      (1). Invoice and Credits      (2). Prepa ...

  8. GL_子模组过账至总账通过SLA修改会计方法改变科目(案列)

    2014-06-02 BaoXinjian

  9. select函数的并发限制和 poll 函数应用举例

    一.用select实现的并发服务器,能达到的并发数,受两方面限制 1.一个进程能打开的最大文件描述符限制.这可以通过调整内核参数.可以通过ulimit -n来调整或者使用setrlimit函数设置,  ...

  10. Calendar 中getActualMaximumd 功能

    String str = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS")) .format(new Date()); Calend ...