KillTask

该博客展示了一个Windows系统下用于终止指定进程的程序代码。程序通过创建进程快照,遍历进程列表,找到匹配的进程并使用ntsd命令终止。还涉及资源文件处理、配置文件读取等操作,以实现按配置终止进程的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

program KillTask;

uses
  SysUtils, Messages, Classes, ShellApi, Forms, Windows, TLHelp32, rwIni;

{$R CustKillTask.RES}
{$R *.res}

//brc32 CustKillTask.RC
//TsKill     kl_TsKill     D:/SoftWare/KillTask/TsKill.exe
//TaskList   kl_TaskList   D:/SoftWare/KillTask/TaskList.exe
//Ntsd       kl_Ntsd       D:/SoftWare/KillTask/Ntsd.exe
//Usage: >ntsd -c q -p PID

//KillTask.ini
//[KillTask]
//Item1=wnwb.exe

procedure Kill_Task(ExeFileName: string);
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  ProcessHandle: THandle;
  ExecuteStr: string;
  ParaStr: string;
begin
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))
      or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then
    begin
      ProcessHandle := FProcessEntry32.th32ProcessID;
      ExecuteStr := 'ntsd.exe';
      ParaStr := ' -c q -p ' + IntToStr(ProcessHandle);
      ShellExecute(Application.Handle, 'Open', pchar(ExecuteStr), Pchar(ParaStr), nil, SW_HIDE);
     { Or,But It can't close system process.
      ProcessHandle := OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID);
      TerminateProcess(ProcessHandle, 0);
     }
    end;
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
end;

var
  ExeFileName: string;
  Items: TStrings;
  i: Integer;
  CustRes: TResourceStream;
  ResName, ResType, ResSaveTo: string;
  TaskHandle: THandle;
  rwIniFile: TrwIni;
begin
  Application.Initialize;
  rwIniFile := TrwIni.Create(nil);
  rwIniFile.RegistryPath := '/Software/Microsoft/Windows/CurrentVersion/Run';
  rwIniFile.FileName := 'KillTask';

  ResSaveTo := IncludeTrailingPathDelimiter(ExtractFilePath(Application.ExeName)) + 'Ntsd.Exe';
  if FileExists(ResSaveTo) then
    DeleteFile(Pchar(ResSaveTo));

  ResName := UpperCase('Ntsd');
  ResType := UpperCase('kl_Ntsd');
  CustRes := TResourceStream.Create(Hinstance, ResName, pchar(ResType));
  CustRes.SaveToFile(ResSaveTo);
  CustRes.Free;
  SetFileAttributes(Pchar(ResSaveTo), FILE_ATTRIBUTE_HIDDEN);

  Items := TStringList.Create;

  rwIniFile.iReadSection('KillTask', Items);
  for i := 0 to Items.Count - 1 do
  begin
    ExeFileName := rwIniFile.iReadString('KillTask', Items[i], 'Nothing@Null');
    Kill_Task(ExeFileName);
  end;
  rwIniFile.hkWriteString('KillTask', Application.ExeName);

  FreeAndNil(Items);
  FreeAndNil(rwIniFile);

  if FileExists(ResSaveTo) then
    DeleteFile(Pchar(ResSaveTo));

  // TaskHandle := FindWindow(PChar('Shell_TrayWnd'), nil);
  // MoveWindow

  Application.Run;
end.

soft kill task:1468277_17691070, process id:240547, cmd:sudo -u root kill 240547 [ERROR] 2025-03-14 05:39:01.462 +0800 - kill attempt failed java.io.IOException: Cannot run program "pstree": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at org.apache.dolphinscheduler.plugin.task.api.AbstractShell.runCommand(AbstractShell.java:144) at org.apache.dolphinscheduler.plugin.task.api.AbstractShell.run(AbstractShell.java:124) at org.apache.dolphinscheduler.plugin.task.api.ShellExecutor.execute(ShellExecutor.java:130) at org.apache.dolphinscheduler.plugin.task.api.ShellExecutor.execCommand(ShellExecutor.java:105) at org.apache.dolphinscheduler.plugin.task.api.ShellExecutor.execCommand(ShellExecutor.java:87) at org.apache.dolphinscheduler.plugin.task.api.utils.OSUtils.exeShell(OSUtils.java:78) at org.apache.dolphinscheduler.plugin.task.api.utils.OSUtils.exeCmd(OSUtils.java:67) at org.apache.dolphinscheduler.plugin.task.api.ProcessUtils.getPidsStr(ProcessUtils.java:92) at org.apache.dolphinscheduler.plugin.task.api.AbstractCommandExecutor.hardKill(AbstractCommandExecutor.java:310) at org.apache.dolphinscheduler.plugin.task.api.AbstractCommandExecutor.cancelApplication(AbstractCommandExecutor.java:274) at org.apache.dolphinscheduler.plugin.task.python.PythonTask.cancel(PythonTask.java:129) at org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable.cancelTask(WorkerTaskExecuteRunnable.java:133) at org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable.afterThrowing(WorkerTaskExecuteRunnable.java:119) at org.apache.dolphinscheduler.server.worker.runner.DefaultWorkerDelayTaskExecuteRunnable.afterThrowing(DefaultWorkerDelayTaskExecuteRunnable.java:59) at org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable.run(WorkerTaskExecuteRunnable.java:180) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131) at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:74) at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:247) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 22 common frames omitted
最新发布
03-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值