【发布时间】:2010-01-20 16:23:36
【问题描述】:
我有一个在后台运行 python 脚本的 Delphi 服务器(它们的运行类似于“python Sync.py **params**”)。
这个脚本可以做一些事情,比如连接到外部服务器、打开 ssh 连接和他们可以挂起的可怕的东西。
我需要检测它们是否挂起,然后将其杀死。此外,如果服务器已关闭,并且也想终止进程(如果没有,Delphi 服务器挂起,从桌面消失但在后台不可见。如果再次执行服务器,这会导致稍后出现问题)。
先试试不行。该进程被终止,但如果我关闭应用程序,服务器就会挂起。
所以问题是是否存在更可靠/更好的方法来杀死子进程。
现在,我保存他们的 Handle 和 GetTickCount ,如下所示:“handle=tickcount”,然后每 4 秒运行一次 TTimer 并查看进程是否超时:
procedure TfrmMain.CheckProcess(Sender: TObject);
var
i: Integer;
Fecha:TDateTime;
start, stop, elapsed,Handle : cardinal;
begin
stop := GetTickCount;
for i := (FProcesos.Count - 1) downto 0 do
begin
start := StrToInt( FProcesos.ValueFromIndex[i] );
elapsed := stop - start; //milliseconds
//Esta muerto el proceso??
if ((elapsed>TIMEOUT_PROCESS) or (FTimer.Enabled=False)) then
begin
Handle := StrToInt( FProcesos.Names[i] );
TerminateProcess(Handle,0);
CloseHandle( Handle );
FProcesos.Delete( i );
LogMsg('A process timed out!',msgError);
end;
end;//for
end;
【问题讨论】:
-
好的,但问题是什么?
标签: multithreading delphi winapi