如何用程序发现哪些进程已经死掉或不响应,并杀死这些进程。 (100分)

  • 主题发起人 主题发起人 freecom
  • 开始时间 开始时间
F

freecom

Unregistered / Unconfirmed
GUEST, unregistred user!
以前的问题自己解决了,现在再问一个:
如何用程序发现哪些进程已经死掉或不响应,并杀死这些进程。
 
不会吧?好久没来大富翁(连老用户名和密码都忘了),问个这么常见的问题都没人答。
希望别让我失望。
 
我自己解决了
 
能说说如何解决的吗?或是mail个例子与我?maming_hn@163.net
 
记得该free的Free。习惯吧:)
 
你说进程还是线程?
是程序里的线程?还是WINDOWS下的所有线程?
 
我可以保证我的进程不死,但我不能保证别人的,所以我需要发现难些进程已经死了,我去
杀掉它,以保证系统不最终崩掉。哪位知道如何通过编程的方法实现类似NT/2000下进程管理
那样的功能?
 
freecom:
你怎么保证自己进程不被杀死呢?

查杀进程(NT/2000适用):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, ExtCtrls, StdCtrls, tlhelp32;

type
TForm1 = class(TForm)
Button1: TButton;
ListView1: TListView;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
Han: THandle;
Process: PROCESSENTRY32;
ok: boolean;
Rec: TListItem;
i: integer;
begin
ListView1.Items.Clear;
i := 0;
Han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
Process.dwSize := SizeOf(Process);
ok := Process32First(Han, Process);
while ok do
begin
Rec := ListView1.Items.Add;
Rec.Caption := Process.szExeFile;
Rec.SubItems.Add(IntToStr(Process.th32ProcessID));
i := i + 1;
ok := Process32Next(Han, Process);
end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var
Han: THandle;
ProcessID: int64;
ExitCode: DWORD;
i: integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
if listview1.Items.Selected then
begin
ProcessID := StrToInt64(ListView1.Selected.SubItems.Strings[0]);
Han := OpenProcess(PROCESS_TERMINATE, true, ProcessID);
GetExitCodeProcess(Han, ExitCode);
TerminateProcess(Han, ExitCode);
end;
Sleep(100);
Button1.Click;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Button1Click(sender);
end;

end.


 
让线程给进程定时发消息,如果消息间断,则表示线程死掉,KILL IT
 
为什么我不行??这段代码毫无效果


ok := Process32First(Han, Process);
while ok do
我想应该是来到这里条件不足,进程没有被罗列
 
各位smileboy这段代码又调过的吗?
 
i want to know
 
smileboy这段代码,我得实验结果是可以列出目前进程,但是看不出哪个不响应。另外,一些系统进程杀不死!
那位大侠对这个问题还有补充?
 
到底能不能知道哪个进程没有响应???
 
很简单, 用sendmessagetimeout给进程发消息,如果timeout了都没响应那就kill吧
 
同意楼上!
 
http://nowcan.yeah.net

有个函数IsHungAppWindow
 
楼上说得那个函数没找到。
现在关键问题是有些进程杀不掉(尤其是系统级的),有没有办法杀掉这些进程或者强制关机。
 
后退
顶部