У меня есть сервер Delphi, который запускает скрипты python в фоновом режиме (они работают аналогично «python Sync.py **params**
»).Убить дочерний процесс из основного приложения
Эти скрипты могут делать такие вещи, как подключение к внешним серверам, открытые ssh-соединения и страшные вещи, где они могут висеть.
Мне нужно определить, висят ли они и убивают. Кроме того, если сервер закрыт и вы хотите также убить процесс (если нет, сервер Delphi зависает, исчезает с рабочего стола, но становится невидимым в фоновом режиме. Это вызывает проблемы позже, если сервер выполняется снова).
С первой попытки не работает. Процесс будет убит, но если я закрою приложение, сервер зависает.
Вопрос в том, существует ли более надежный/лучший способ убить дочерний процесс.
Теперь, я сохранить их Handle и их GetTickCount, как это: «ручка = tickcount», то работает с TTimer каждые 4 секунды и посмотреть, если время ожидания процесса:
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;
Хорошо, но в чем вопрос? –