监控其它进程

program Monitor;

// {$APPTYPE CONSOLE}

uses
  Winapi.Windows,
  System.SysUtils,
  ProcLib in ‘ProcLib.pas‘;

var
  Mutex: HWND;

const
  c_AppName = ‘server.exe‘;

begin
  Mutex := Winapi.Windows.CreateMutex(nil, False, ‘Monitor‘);
  if (GetLastError = ERROR_ALREADY_EXISTS) or (Mutex = 0) then
    Exit;

G_ExeFile := ExtractFilePath(ParamStr(0)) + c_AppName;

while True do
  begin
    Sleep(2000);
    if ProcessRunning(c_AppName) then
      Continue;

if G_ExeFile = ‘‘ then
      Continue;

Exec(G_ExeFile);
  end;

end.

unit ProcLib;

interface

uses
  Winapi.Windows, System.SysUtils, Winapi.PsAPI,
  Winapi.TlHelp32, Winapi.ShellAPI;

function ProcessRunning(ExeName: string): Boolean;

procedure Exec(FileName: string);

var
  G_ExeFile: string = ‘‘;

implementation

function ProcessFileName(PID: DWORD): string;
var
  Handle: THandle;
begin
  Result := ‘‘;
  Handle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
    False, PID);
  if Handle <> 0 then
    try
      SetLength(Result, MAX_PATH);
      if GetModuleFileNameEx(Handle, 0, PChar(Result), MAX_PATH) > 0 then
        SetLength(Result, StrLen(PChar(Result)))
      else
        Result := ‘‘;
    finally
      CloseHandle(Handle);
    end;
end;

function ProcessRunning(ExeName: string): Boolean;
var
  SnapProcHandle: THandle;
  NextProc: Boolean;
  ProcEntry: TProcessEntry32;
  ProcFileName: string;
begin
  Result := False;
  SnapProcHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if SnapProcHandle = INVALID_HANDLE_VALUE then
    Exit;

try
    ProcEntry.dwSize := SizeOf(ProcEntry);
    NextProc := Process32First(SnapProcHandle, ProcEntry);

while NextProc do
    begin
      if ProcEntry.th32ProcessID <> 0 then
      begin
        ProcFileName := ProcessFileName(ProcEntry.th32ProcessID);
        if ProcFileName = ‘‘ then
          ProcFileName := ProcEntry.szExeFile;

if SameText(ExtractFileName(ProcFileName), ExeName) then
        begin
          Result := True;
          Break;
        end;
      end;
      NextProc := Process32Next(SnapProcHandle, ProcEntry);
    end;
  finally
    CloseHandle(SnapProcHandle);
  end;
end;

procedure Exec(FileName: string);
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), #0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWDEFAULT;
  if not CreateProcess(PChar(FileName), nil, nil, nil, False,
    CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
    PChar(ExtractFilePath(FileName)), StartupInfo, ProcessInfo) then
    Exit;
  WaitForSingleObject(ProcessInfo.hProcess, INFINITE);
end;

end.

http://www.cnblogs.com/hnxxcxg/archive/2012/05/22/2512954.html

时间: 2024-10-21 01:32:41

监控其它进程的相关文章

zabbix监控之进程自动发现

1,获取要监控的进程到/tmp/process_list.txt文件 cat process_list.sh #!/bin/bashcat /dev/null >/tmp/process_list.txt if [ `ps aux|grep "/data/apache_projects/tomcat7-express-18034"|grep -v grep |wc -l` -gt 0 ];then echo "/data/apache_projects/tomcat7-

Windows zabbix监控远程进程实现机制

最近负责zabbix监控部署方面的工作,需要完成本地服务端监控远程虚拟机的运行状态(CPU.打开的进程等),与大家分享下我的实现方法. (1) 首先,需要实现记录zabbix客户端的进程的批处理:zabbix_task.bat; zabbix_task.bat内容如下: @echo off chcp 65001 tasklist /v |findstr "%username%" > c:/zabbix_temp.txt  #进程路径根据个人习惯设置 pause (2) 其次,实现

zabbix 监控特定进程

由于一些服务器上跑着一些重要程序,需要对它们进行监控,公司用的是zabbix监控,之前都是在zabbix中添加自定义脚本对特定程序进行监控,最近看了zabbix的官方文档,发现原来强大的zabbix居然能监控程序是否运行,并能监控其使用的内存大小,以下是我的实践记录: 1. 在特定机器或模板上创建新的监控项,点击Key 后面的Select 按钮,选择如下两项,一项是用来监控特定进程的数量,另一项是用来监控进程使用内存的大小. 2.以下是对squid进程的监控配置,key中的参数说明,第一个参数是

zabbix监控 nginx 进程

参考 http://chenx1242.blog.51cto.com/10430133/1837990 1 前期说明 zabbix_server查看"文件在后台运行数量"所对应的key就是:proc.num[<name>,<user>,<state>,<cmdline>],具体意思如下: <name>:进程名称,默认为"all processes": <user>:用户名,默认 "al

用飞信监控GoldenGate进程

监控GoldenGate进程 1)         在goldengate安装目录下建立文件ogginfo $vim ogginfo info all 2)         配置飞信报警 下载飞信安装包http://down.51cto.com/data/240154 $mkdir /usr/local/sms 将飞信代码包上传到sms目录,并将所有者赋予oracle 3)         配置监控脚本vi /usr/local/bin/gg_monitor.sh #!/bin/sh #moni

Zabbix监控Windows进程重启

前段时间,一个朋友咨询我怎么监控Windows进程的重启.生产环境有监控进程的启动和关闭,但重启还没想过.经过一番思考和摸索后成功完成了监控,下面把监控思路和方法分享给大家. 我首先想到的是通过Zabbix自带的进程数监控(proc.num)来做,但有两个难点:一.进程数从1变为0再变为1,算是一次重启.触发器要判断三次连续的监控数据,不太好做:二.进程从关闭到下次启动,中间间隔多长时间算是一次重启呢? 然后想到了zabbix监控操作系统的重启,比如Windows系统重启的触发器:{Templa

Linux下用NetHogs监控各个进程流量

有时候我们客户会发现服务器或 VPS 网络慢,进一步发现大量带宽被占用,一些客户到这里为止就不知道怎么办了.有什么简单办法能找出哪个程序(或者进程)占用了带宽呢?Linux 监控流量的小工具不少,如 iftop, iptraf, ifstat, darkstat, bwm-ng, vnstat 等,大都是统计和监控网卡流量的.今天介绍的 NetHogs 有点特别,可以监控每个进程的网络带宽占用情况. 在 Ubuntu/Debian 上安装 nethogs: $ sudo apt-get inst

使用系统存储过程来监控SQLServer进程和会话详解

 承接上文,本文讲述如何使用系统存储过程来监控系统. SQLServer同样也提供了一系列系统存储过程用于监控SQLServer,获取当前进程.会话.请求以及锁定的详细信息.本文将演示系统存储过程来实现这些监控. 情景: 有时候你会发现应用程序突然变得很慢,经常需要等待数据库响应,此时你需要快速查看是否请求被阻塞或者挂起. 准备工作: 在本文中,将使用以下存储过程来获取当前进程的信息: Sp_who Sp_who2 步骤: 1.  打开SSMS连到SQLServer实例并打开新查询窗口. 2

zabbix监控特定进程

由于一些服务器上跑着一些重要程序,需要对它们进行监控,公司用的是zabbix监控,之前都是在zabbix中添加自定义脚本对特定程序进行监控,最近看了zabbix的官方文档,发现原来强大的zabbix居然能监控程序是否运行,并能监控其使用的内存大小,以下是我的实践记录: 1.在特定机器或模板上创建新的监控项,点击Key 后面的Select 按钮,选择如下两项,一项是用来监控特定进程的数量,另一项是用来监控进程使用内存的大小. 2.以下是对squid进程的监控配置,key中的参数说明,第一个参数是进

Zabbix安装(十):监控windows进程

1.监控windows进程的几个KEYS: proc.mem[<name>,<user>,<mode>,<cmdline>] Memory used by a process. <name> process name (default: "all processes"). <user> user name (default: "all users"). <mode> possible