[愚翁专栏]如何对系统中的某个进程进行监控

如何对系统中的某个进程进行监控 最近看到一篇文章,就是如何对系统某个进程进行监控,并且当这个进程触发某些事件的时候,能进行相应。而且发现有人问这方面的问题,我就大致在其原有的基础进行如下的修改。 首先说明的一点,方法是基于WMI的。以下是我扩展类的代码说明://------------------------ProcessInfo Class------------------------------------ 阅读详情

最近看到一篇文章,就是如何对系统某个进程进行监控,并且当这个进程触发某些事件的时候,能进行相应。而且发现有人问这方面的问题,我就大致在其原有的基础进行如下的修改。

 

首先说明的一点,方法是基于WMI的。以下是我扩展类的代码说明:

//------------------------ProcessInfo Class------------------------------------

//-----------------------------------------------------------------------------

//---File:clsProcessInfo.cs

//---Description:This class demonstrates the use of WMI.

//                It provides a static method to query the list of running processes.

//                And it provides two delegated events binding specific application.

//---Author:Knight

//---Date:Mar.21, 2006

//-----------------------------------------------------------------------------

//----------------------{ ProcessInfo Class }----------------------------------

using System;

using System.Data;

using System.Management;       

using System.Diagnostics;

 

namespace WinProcess

{

    /// <summary>

    /// ProcessInfo class.

    /// </summary>

    public class ProcessInfo

    {

        // defenition of the delegates

        public delegate void StartedEventHandler(object sender, EventArgs e);

        public delegate void TerminatedEventHandler(object sender, EventArgs e);

       

        // events to subscribe

        public StartedEventHandler Started = null;

        public TerminatedEventHandler Terminated = null;

 

        // WMI event watcher

        private ManagementEventWatcher watcher;

 

        /// <summary>

        /// Construction that binds specific application with event declared

        /// </summary>

        /// <param name="LocalServerName"></param>

        /// <param name="appName"></param>

        public ProcessInfo( string appName)

        {

            // querry every 2 seconds

            string pol = "2";

 

            string queryString =

                "SELECT *" +

                "  FROM __InstanceOperationEvent " +

                "WITHIN  " + pol +

                " WHERE TargetInstance ISA 'Win32_Process' "  +                

                "   AND TargetInstance.Name = '" + appName + "'";

                               

            string scope = @"//127.0.0.1/root/CIMV2";

           

            // create the watcher and start to listen

            watcher  = new ManagementEventWatcher(scope, queryString);

            watcher.EventArrived += new EventArrivedEventHandler(this.OnEventArrived);         

            watcher.Start();

        }

 

        /// <summary>

        /// Destruction function

        /// </summary>

        public void Dispose()

        {

            watcher.Stop();

            watcher.Dispose();

        }

 

        /// <summary>

        /// Get all processes that running in local machine

        /// </summary>

        /// <returns></returns>

        public static DataTable RunningProcesses( )

        {

            // The second way of constructing a query

            string queryString =

                "SELECT Name, ProcessId, Caption, ExecutablePath" +

                "  FROM Win32_Process";

                               

            SelectQuery query = new SelectQuery(queryString);

            ManagementScope scope = new ManagementScope( @"//127.0.0.1/root/CIMV2" );

           

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

            ManagementObjectCollection processes = searcher.Get();

           

            DataTable result = new DataTable();

            result.Columns.Add("Name", Type.GetType("System.String"));

            result.Columns.Add("ProcessId", Type.GetType("System.Int32"));

            result.Columns.Add("Caption", Type.GetType("System.String"));

            result.Columns.Add("Path", Type.GetType("System.String"));

           

            foreach(ManagementObject mo in processes)

            {

                DataRow row = result.NewRow();

                row["Name"] = mo["Name"].ToString();

                row["ProcessId"] = Convert.ToInt32(mo["ProcessId"]);

                if (mo["Caption"]!= null)

                    row["Caption"] = mo["Caption"].ToString();

                if (mo["ExecutablePath"]!= null)

                    row["Path"] = mo["ExecutablePath"].ToString();

                result.Rows.Add( row );

            }

            return result;

        }

 

        /// <summary>

        /// Get all processes that running in specific server

        /// </summary>

        /// <param name="sServerName"></param>

        /// <param name="sUserName"></param>

        /// <param name="sPassword"></param>

        /// <returns></returns>

        public static DataTable RunningProcesses(

            string sServerName,

            string sUserName,

            string sPassword )

        {

            // The second way of constructing a query

            string queryString =

                "SELECT Name, ProcessId, Caption, ExecutablePath" +

                "  FROM Win32_Process";

                               

            SelectQuery query = new SelectQuery(queryString);

 

            //Set connection parameters

            ConnectionOptions options = new ConnectionOptions();

            options.Username = sUserName;

            options.Password = sPassword;

           

            //Create management scope

            ManagementScope scope = new ManagementScope(

                string.Format( @"//{0}/root/CIMV2", sServerName ),

                options );

 

            //To connect

            try

            {

                scope.Connect();

            }

            catch( Exception err )

            {

                Debug.WriteLine( err.Message );

                return null;

            }

            catch

            {

                return null;

            }

 

            ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

            ManagementObjectCollection processes = searcher.Get();

           

            DataTable result = new DataTable();

            result.Columns.Add("Name", Type.GetType("System.String"));

            result.Columns.Add("ProcessId", Type.GetType("System.Int32"));

            result.Columns.Add("Caption", Type.GetType("System.String"));

            result.Columns.Add("Path", Type.GetType("System.String"));

           

            foreach(ManagementObject mo in processes)

            {

                DataRow row = result.NewRow();

                row["Name"] = mo["Name"].ToString();

                row["ProcessId"] = Convert.ToInt32(mo["ProcessId"]);

                if (mo["Caption"]!= null)

                    row["Caption"] = mo["Caption"].ToString();

                if (mo["ExecutablePath"]!= null)

                    row["Path"] = mo["ExecutablePath"].ToString();

                result.Rows.Add( row );

            }

            return result;

        }

 

        /// <summary>

        /// Event handle function

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void OnEventArrived(object sender, System.Management.EventArrivedEventArgs e)

        {

            try

            {

                string eventName = e.NewEvent.ClassPath.ClassName;

                Debug.WriteLine( eventName );

 

                if (eventName.CompareTo("__InstanceCreationEvent")==0)

                {

                    // Started

                    if (Started!=null)

                        Started(this, e);

                }

                else if (eventName.CompareTo("__InstanceDeletionEvent")==0)

                {

                    // Terminated

                    if (Terminated!=null)

                        Terminated(this, e);

 

                }              

            }

            catch (Exception ex)

            {

                Debug.WriteLine(ex.Message);

            }

        }

       

    }

}

 

       大致类的说明如下:

1.  两个静态方法,是获得系统中所有进程(一个是获得本地;另一个是获得某个指定的服务器);

2.  OnEventArrived,事件响应函数,当根据事件类型来进行传递;

类的使用大致如下:

1.  获得本地系统中所有进程:

using WinProcess;

        DataTable dt = ProcessInfo.RunningProcesses( );

        dataGrid1.DataSource = dt;

 

2.  获得某个指定系统中所有进程:

using WinProcess;

        DataTable dt = ProcessInfo.RunningProcesses( Server, UserName, Psw );

        dataGrid1.DataSource = dt;

 

3.  监控某个程序并(以下是监控NotePad程序):

using WinProcess;

        private ProcessInfo notePad;

             

              //In your form load event

        notePad = new ProcessInfo("notepad.exe" );

        notePad.Started += new ProcessInfo.StartedEventHandler(this.NotepadStarted);

        notePad.Terminated += new ProcessInfo.TerminatedEventHandler (this.NotepadTerminated);

      

              //Define your event handle

        private void NotepadStarted(object sender, EventArgs e)

        {

            //Process start event

        }

        private void NotepadTerminated(object sender, EventArgs e)

        {

            //Process terminate event

        }

 

 

本来,想修改构造函数,使之能适应捕获到远程系统某个程序的事件,但是很不幸的是,捕获到的信息只是错误信息,其原因就是事件无法通过RPC获得,所以不得不放弃。


利用zabbix监控ogg进程(Windows平台) 在Windows平台上,可以通过Zabbix监控Oracle GoldenGate(OGG)进程的状态。 使用Zabbix自带的服务模板,它可以检查Windows上的进程。本章详细介绍如何使用zabbix监控ogg进程。 阅读详情

相关推荐

进程监控程序

非常方便系统运维的一个小工具,服务器应用程序进程监控,有界面配置,可以自动启动监控的应用进程,确保在无人值守的应用服务器上应用的安全运行。另外,也可以监控日志文件,确保应用进程僵死状态能够被监控,并自动重启。

【网络安全】小白每天学一点之“监控应用程序行为” [process monitor]

Process Monitor 功能:监控应用程序的文件操作、系统操作、注册表操作、网络行为等。 1.定位程序 首先是配置监控的应用程序,可以从过滤器设置,点击工具栏的过滤器按钮设置 Process Name is “应用名称”即可。 如果不知道应用名称的应用怎么办,比如突然弹出的广告窗口,看到那个雷达小图标没,拖到当前活动窗口上就能定位到是哪个进程打开的窗口,对付恶意广告流氓软件啥的很好用。 2.过滤行为 当你试图去分析一个应用程序的行为可能会被铺天盖地的程序行为感到困惑,一般..

roshy的专栏 7672

win进程监控工具 Procmon

Procmon系统进程管理器是一个功能强大的系统检测工具,不但可以监视进程/线程,还可以关注到文件系统,注册表的变化.

网络中的进程监控

OpManager作为一个集成的进程监控软件,使管理员能够远程监控和管理在发现的设备上运行的进程,还能够充当Windows进程监控器/Linux进程监控器,从而允许管理员通过 SNMP/WMI/CLI 对 Windows、Linux、Solaris、Unix、HP UX、IBM AIX、ESX VMware服务器等上运行的关键进程进行主动进程监控。

ITmoster的博客 1176

python监控进程状态,记录重启时间及进程号的实例

本脚本为本人在性能测试过程中编写,用于对进程状态的监控,也可以用于日常的监控,适用性一般,扩展性还行 # -*- coding: UTF-8 -*- # author=baird_xiang import os import time import re import copy nginxRestart_num= -1 nginxReload_num= -1 logSender_num= -1 es_num= -1 nginxParent_pid=[] nginxChild_pid=[] logSender_pid=[] es_pid=[] nginxRestart_time =[] ngi

Cocos Creator 3D音频定位实战:从原理到沉浸感实现

3D音频定位是游戏开发中实现沉浸感的关键技术,其核心原理基于HRTF(头部相关传输函数)模型,模拟声音在空间中的传播与双耳感知差异。这项技术通过赋予声音空间坐标、距离衰减和方向属性,将音频从背景元素提升为可交互的环境线索,极大增强了虚拟世界的真实感与玩家的空间认知。在工程实践中,开发者需要深入理解声源、听者、衰减曲线与多普勒效应等基础概念,并合理运用音频池、优先级管理与动态混音等技术手段来平衡效果与性能。对于Cocos Creator开发者而言,无论是使用引擎原生的AudioSource组件构建轻量级方案,

weixin_30972263的博客 291

linux如何监控特定进程,Linux下,如何监控某个进程到底向哪个地址发起了网络调用...

Linux下,如何监控某个进程到底向哪个地址发起了网络调用有时候,有些应用,比如idea,你发起某个操作时,其底层会去请求网络,获取一些数据。但是不知道,请求了什么地址。举个例子,在idea中,maven管理的java工程,你在reimport的时候,肯定会去下载依赖,但是,有时候感觉配置的私服没生效,好像,请求还是去maven中央仓库下载。怎么确定是不是真的去了maven中央仓库下载呢?有证据吗...

weixin_34471637的博客 664

反向代理的隐形陷阱:为何你的HTTPS请求会降级为HTTP?

本文深入探讨了Nginx反向代理中HTTPS降级为HTTP的隐形陷阱及其安全风险,分析了五大降级诱因,包括协议信息丢失、重定向配置错误等,并提供了完整的防御性配置方案和实战指南,帮助开发者确保Web应用的安全性。

kotlin6android的博客 453

Linux 实现进程监控,并发送通知到钉钉

在 Linux 中设置监控服务进程的定时任务,如果触发满足条件,则调用钉钉的机器人通知接口,发送消息 申请钉钉机器人 该功能属于钉钉的自定义机器人功能,在 自定义机器人接入 - 钉钉开放平台 有具体接入描述,以下就介绍一些关键点。 机器人的安全设置 在安全设置中,自定义关键词 表示:发送的消息内容中,必须包含这些提前设置好的关键词,否则消息无法发出。IP 地址段 表示:只接收来自该 IP 的请求。 本文是直接使用 Linux 的 curl 命令来实现消息发送,所以不需要勾选 加签 选项。 点击完成后,.

asing1elife's blog 2695

Altium Designer实战:手把手教你设计智能车竞赛疯狂电路组赛道(附封装库)

本文详细介绍了使用Altium Designer软件进行智能车竞赛“疯狂电路”组赛道设计的全流程实战指南。从理解比赛规则、搭建设计环境、创建专用元器件封装库,到电路布局、路径规划及设计输出验证,手把手教你高效完成符合计分标准的赛道图纸设计,并附上实用的封装库管理方法。

alice7model的博客 1320

SAP ALV表格F4搜索帮助不触发DATA_CHANGE?3步排查搞定

本文针对SAP ALV表格中F4搜索帮助选择值后,DATA_CHANGE事件不触发的经典问题,提供了三步系统性排查方法。核心在于理解F4值回写机制,并需在事件处理中手动填充修改表以通知ALV控件数据变更,从而确保后续校验、自动计算等依赖DATA_CHANGE的逻辑能正常执行。

c2d3e4f的博客 1132

技术分享 | Linux 入侵检测中的进程创建监控

转载自:看雪专栏 作者简介:张博,网易高级信息安全工程师。 0x00 简介 在入侵检测的过程中,进程创建监控是必不可少的一点,因为攻击者的绝大多数攻击行为都是以进程的方式呈现,所以及时获取到新进程创建的信息能帮助我们快速地定位攻击行为。 本文将介绍一些常见的监控进程创建的方式,包括其原理、Demo、使用条件和优缺点。行文仓促,如果有哪些错误和不足,还望大家批评指正。 0x01 常见方式 目前来看,常见的获取进程创建的信息的方式有以下四种: So preload Netlink .

wsfcc的专栏 1499

大语言模型的三种主要架构 Decoder-Only、Encoder-Only、Encoder-Decoder

f基于 Transformer 模型以非灰色显示:decoder-only 模型在蓝色分支,encoder-only 模型在粉色分支,encoder-decoder 模型在绿色分支。模型在时间线上的垂直位置表示它们的发布日期。开源模型由实心方块表示,而闭源模型由空心方块表示。右下角的堆积条形图显示了各公司和机构的模型数量。从时间轴上,我们可以看到:2021年前,当 OpenAI 决定在,他们实际上是在逆流而上。

u010899985的博客 2万+

HoRain云--linux监控指定进程

轻量级监控:top -p PID 或 htop。 定时快照:watch + ps 或 pidstat。 深度分析:结合 iotop、pidstat -w 等工具。 自动化:编写Shell脚本定期检查。

2401_86544677的博客 1074

高通平台 Android T 蓝牙技术全解析:A2DP 与 AVRCP 核心代码路径与交互流程

A2DP 接收端 - 连接流程(AVDTP 打开)

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 288

工业激光器核心参数详解与选型实战:从理论到产线落地(五)

本文深入解析了脉冲激光加工的三大核心参数——脉宽、重复频率和脉冲能量的协同作用机制。通过公式推导和产线案例,揭示了参数设置对加工良率的关键影响:1. 脉宽决定热影响区大小,缩短脉宽可显著提升加工精度;2. 重复频率影响加工速度和热积累效应,需平衡效率与质量;3. 脉冲能量决定材料去除量,过大易导致加工缺陷。文中以ABS塑料打标、模具清洗和微孔钻孔为例,展示了参数优化如何将良率从65%提升至99%,并提供了不同应用场景的参数选型表和调试技巧,强调峰值功率比平均功率更具决定性作用。

weixin_44520581的博客 2421

从VMM中识别GUEST OS中的用户进程

 从VMM中识别GUEST OS中的用户进程康华 :主要从事 Linux 操作系统内核、虚拟机、Linux 技术标准、计算机安全、软件测试等领域的研究与开发工作,曾就职 MII-HP 软件实验室 、瞬联软件公司/MOTOROLA、LENOVO研究院 。其所合写的Linux

康华的专栏 7991

SAP_MM_配额安排_PA认证总结

配额安排是企业进行供应商管理的一种方式。通过配额管理,企业可以与多家供应商保持业务往来,以保证某些紧缺原材料的正常供货。此外,企业也可以通过不同的配额比例,提高供应商优化服务、降低价格的积极性。

java_zhong1990的专栏 1021

【linux】linux实操篇之进程管理

本篇博客总结linux中的进程管理相关知识,主要有进程介绍,终止进程,服务管理以及监控服务,一起来看看吧!

阿牛的博客 3718

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【嵌入式】嵌入式系统稳定性建设:Linux后台服务进程监控、保活、管理方案

本文将探讨几种流行的后台服务进程监控、保活、管理方案方法,并对它们的优缺点进行深入分析,包括资源占用、易用性等方面。同时,为每种方法提供示例代码或配置文件示例。

科技改变人类,技术成就未来 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[免费专栏] ATTACK安全之Android 车机设备中监控命令执行的一些想法「概念篇」

转移发布平台通知:将不再在优快云博客发布新文章,敬请移步知识星球... ...

橙留香Park的博客 2152

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Linux系统---僵尸进程、孤儿进程

有了上一篇博客的学习,我们已经简单了解了进程的基础知识,今天我们再来学习两个特殊的进程,僵尸进程和孤儿进程。

顾得泉的博客 3733

【Linux】探索进程的父与子

探索Linux下的父子进程,以及fork函数理解

小小小智_x0__0x_的博客 7846

远程监控linux 进程_必须掌握的JVM性能监控工具

引言前一段时间面阿里,碰到了这样的问题。面试官:“JVM有关指令了解吗?”我:“调优参数吗,也会一些,-Xms设置初始堆大小,-Xmx设置最大堆大小......”面试官:“你可能理解错我的意思了,我想知道的是相关指令。比如查看jvm进程情况,内存占用,GC情况等。”我:“额,指令不太了解,就知道有一个内置的工具Jconsole能查看Java线程使用情况,是否持有死锁。”面试官:“对,其他的工具呢,...

weixin_39766867的博客 436

linux 系统监控命令之 top-(转自 Howie的专栏)

top命令经常用来监控linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。 本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。 top进入视图 top视图 01 【top视图 01】是刚进入...

dengyidi7792的博客 120

Linux—进程状态、僵尸进程、孤独进程、优先级

分享进程知识。

2301_78995005的博客 1527
上一篇: [愚翁专栏]如何使用Base64进行加密和解密
下一篇: [愚翁专栏]如何把网络共享目录映射为本地驱动器(续)
MaybeHelios
博客等级 码龄21年 65粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值