-
Junior Member
- Регистрация: 08 2018
- Сообщений: 30
Бывают случаи, когда в памяти остаётся процесс, который штатными средствами винды убить невозможно. Попытка убийства через диспетчер задач выдаёт ошибку доступа, а taskkill пишет:
Ошибка: Не удается завершить процесс с идентификатором 1234.
Причина: Ни один из экземпляров этого задания не запущен.Если глянуть потоки через procexp, то там либо непонятный пустой поток без опознавательных признаков с TID 0, либо ntdll.dll!RtlUserThreadStart и какой-то вменяемый TID. Кто-нибудь знает, что это за фигня и чем её грохнуть?
-
Junior Member
- Регистрация: 11 2006
- Сообщений: 1611
Такие процессы появляются если запустить любой процесс с флагом CREATE_SUSPENDED и после этого не стартануть основной тред. Возможное решение — запустить его, хотя хз надо ли. Лучше разобраться кто их плодит.
2 оттенка серого
Комментарий
-
Junior Member
- Регистрация: 05 2011
- Сообщений: 23
Бывало такое иногда из-за каких-то сбоев асинхронного доступа к файлам, с тем же uTorrent, например
Может тут CancelIoEx надо использовать, но придется вызывать из того же процесса и знать нужный Handle.Комментарий
-
Junior Member
- Регистрация: 03 2020
- Сообщений: 3
через натив их всех в SUSPENDED, потом через NtQuerySystemInformation — отследить, тут были вроде сорцы Process Explorer+ от HiEndSoft
Комментарий
-
Junior Member
- Регистрация: 08 2018
- Сообщений: 30
А тулза какая-то есть, чтобы грохать процессы нестандартными способами? Ну там через Nt, Zw и т.п. Помню, была какая-то тулза и там были разные кнопки с названиями функций: NtTerminateProcess, ZwTerminateProcess и ещё штук 6 вроде. Ещё помню тулзу, которая через свой драйвер процессы грохала. Есть у кого-то такие тулзы?
Комментарий
-
Junior Member
- Регистрация: 03 2016
- Сообщений: 464
Сообщение от IOCTL_
А тулза какая-то есть,
Раньше в Process Hacker 2 было куча методов терминации процесса, но большая методов работала только на 32-битных системах, и это убрали в v2.39
Сейчас методы переписали и перенести в отдельный плагинhttps://github.com/processhacker/plugins-extra/tree/master/TerminatorPlugin
Наверное собранной версии нет, и это нужно компилировать, либо можно просто взять сами методы
В облачке многоточия
Комментарий
-
Junior Member
- Регистрация: 08 2018
- Сообщений: 30
Нашёл статейко шикарное по этому поводу:
12 ways to terminate a process
. Кто-то уже кодил подобное? Как сейчас помню, что где-то такое видел.
Комментарий
-
Junior Member
- Регистрация: 03 2016
- Сообщений: 464
wj32 это и есть Process Hacker -.-»
В облачке многоточия
Комментарий
-
Junior Member
- Регистрация: 08 2018
- Сообщений: 30
Boostyq
Спасибо! Если ничего не найдётся, то придётся компилить или что-то придумывать. Но я помню, что это уже где-то было.Добавлено спустя 2 минуты
Сообщение от Boostyq
wj32 это и есть Process Hacker -.-«
Ага, точно! Семён Семёныч…
Комментарий
-
Junior Member
- Регистрация: 11 2006
- Сообщений: 222
Сообщение от IOCTL_
Помню, была какая-то тулза и там были разные кнопки с названиями функций: NtTerminateProcess, ZwTerminateProcess и ещё штук 6 вроде.
Advanced Process Termination (APT), последняя версия 4.2
b5bc_18.03.2020_EXELAB.rU.tgz — APT.4.2.zip
Комментарий
-
Junior Member
- Регистрация: 08 2018
- Сообщений: 30
Сообщение от ManHunter
Advanced Process Termination (APT), последняя версия 4.2
Ух ты! Кнопочки! Благодарствую!
Комментарий
-
Junior Member
- Регистрация: 12 2019
- Сообщений: 8
Можно попробовать вот эту технику: https://scorpiosoftware.net/2020/03/15/how-can-i-close-a-handle-in-another-process/, но если я не ошибаюсь, вызов NtDuplicateObject вернет ошибку STATUS_PROCESS_IS_TERMINATING.
Комментарий
-
Junior Member
- Регистрация: 07 2016
- Сообщений: 3150
Процессы так висли из за каких то глобальных синхронизаций в ядре на младших версиях. Прибить такие процессы можно только ресетив ядро. Антируткиты киляют процессы и что толку если висяк в ядре.
f13nd
> Такие процессы появляются если запустить любой процесс с флагом CREATE_SUSPENDED и после этого не стартануть основной тред.
Может пример будет, а то у меня завершается. Впрочем оно и не может не завершаться, так как все блокировки свободны. Помню глючило на NtSuspendProcess/NtResumeThread.. хотя это можно потестить.
Теоретически если послать останов поточный и тормознуть такой поток(race), то может что и подвиснет
vx
Комментарий
-
Junior Member
- Регистрация: 07 2017
- Сообщений: 64
Сообщение от difexacaw
Может пример будет
Наверное имелось ввиду NtCreateProcess с флагом PROCESS_CREATE_FLAGS_SUSPENDED (0x00000200)
Если вызвать этот сервис, и дальше ничего не делать с созданным хендлом (не создавать маин поток, не уведомлять csrss и т.д.), а просто закрыть приложение, то хендл так и останется в ядре.
Такой хендл Диспетчер задач не увидит, но он будет виден например в x64dbg, при этом, насколько помню, отладчик не сможет его закрыть.Комментарий
-
Junior Member
- Регистрация: 07 2016
- Сообщений: 3150
dezmand07
> просто закрыть приложение, то хендл так и останется в ядре.
Вся таблица описателей уничтожается при завершении процесса. Интерналс чтоле почитай для начала.
vx
Комментарий
Пользователям персональных компьютеров приходится сталкиваться с разными проблемными ситуациями, решить которые иногда затруднительно самостоятельно. Однако, обнаружив ответ на проблемный вопрос, в следующий раз такие задачи уже не кажутся сложными. Завершить процесс, в котором уже нет необходимости, в большинстве случаев может даже новичок. К сожалению, иногда приходится сталкиваться с тем, что, какие бы попытки ни были предприняты, не завершается всё равно процесс в диспетчере задач.
Узнайте, что делать, если не завершается процесс в Диспетчере задач Windows
Что же делать, когда какой-то процесс «взбунтовался» и не желает подчиниться, как всё-таки осуществить его завершение, можно узнать, если ознакомиться с нашими рекомендациями. Мы поделимся нехитрыми способами, поможем вам овладеть навыками управления всеми процессами, которые запущены на вашем компьютере.
Завершение процессов
Если в процессе работы на компьютере вы стали замечать, что он заметно подвисает, значит, ему тяжело выполнять все возложенные на него задачи. Это происходит, когда вы запускаете множество процессов, а потом их просто забываете остановить.
Конечно, если не увлечься открыванием новых приложений, то с проблемой зависания компьютера удастся сталкиваться реже. Ну а если вы всё-таки очень увлечённо работали, поэтому сами не заметили, как открыли много окон, запустили на выполнение несколько программных приложений и утилит, то закрыть их простым нажатием на кнопку «Выхода», может не получиться.
Алгоритм действий
Для завершения нежелательных процессов, отказывающихся подчиняться пользователю, нужно воспользоваться помощью «Диспетчера задач». Если у вас установлен Windows 7, достаточно кликнуть правой клавишей мышки по нижней панели задач, выбрать параметр «Запустить Диспетчер задач».
Шаг 1
В открывшемся окне на первой вкладке кликните по той утилите, которая вам уже не нужна, а далее в нижней части окна выберите параметр «Снять задачу». Если процесс не совсем безнадёжен, он остановится.
Шаг 2
Можно перейти на вторую вкладку «Процессы», точно также кликнуть по той строке, которая провоцирует в конкретный момент проблемы, а затем нажать на кнопку «Завершить».
Отметьте опцию отображения всех процессов пользователей
К сожалению, даже такие советы иногда для некоторых пользователей оказываются совершенно бесполезными, поскольку всё равно не закрывается процесс в Диспетчере задач.
Если и с вами случилась такая неприятность, вы отчаялись и уже поверили, что единственным выходом из такой проблемной ситуации будет применение вынужденной перезагрузки операционной системы, мы предлагаем вам не паниковать, а ознакомиться с нашими следующими рекомендациями.
Шаг 3
Итак, не произносите фраз типа: «Не могу завершить процесс в Диспетчере задач», а лучше воспользуйтесь уникальными возможностями служебной команды taskkill. Эту команду многие готовы рассматривать в качестве мощнейшего инструмента.
Чтобы запустить такую команду, сначала, конечно же, нужно открыть командную строку, зажав одновременно две клавиши: «Win» и «R». В открывшемся маленьком окошке введите «cmd».
Шаг 4
Теперь вам нужно будет набрать «taskkill» и нажать «Enter». Однако чтобы справиться с неуправляемым процессом к этому слову следует присоединить дополнительную опцию.
В частности, можно завершить процесс при помощи команды taskkill, используя имя приложения, которое отказывается завершаться. Для этого наберите небольшую командную фразу: taskkill / IM «имя приложения». Конечно, вместо словосочетания «имя приложения» вы должны набрать тот процесс, который у вас нет мочи остановить. Например, taskkill / IM excel.exe. Если вы воспользуетесь нашим примером, то в этом случае прекратит работать табличный редактор Excel. Выбирайте ваш процесс, приносящий вам ужасные хлопоты, и прописывайте в команде его имя.
В окне процессы отображаются не только с указанием своего имени, но и идентификатора в том числе. Если вы желаете, вы можете набрать такую командную фразу: taskkill / PID 574, где число 574 будет являться идентификатором проблемного процесса.
Шаг 5
Если на компьютере имеются несколько учётных записей, при этом абсолютно понятно, что зависание возникло именно по причине незавершённых процессов одного из пользователей, можно воспользоваться и такой командной фразой: «taskkill / F / FI «USERNAME eq имя_пользователя». Понятно, что в ней придётся вам самостоятельно изменить непосредственно имя пользователя, по вине которого возникла проблема.
Воспользуйтесь новой командной фразой
Мы рекомендуем вам потренироваться с использованием таких команд. Если у вас всё получится, вы сможете уходить от вынужденных перезагрузок, которые безжалостно вредят операционной системе.
Команда «taskkill», действительно, является мощнейшим инструментом, которому не могут противостоять даже вирусы и троянцы. Такая команда успешно завершает даже их негативную и упорную «деятельность».
Итоги
Мы уверены, что, ознакомившись с изложенными нами советами, вы сможете впоследствии твёрдо говорить своим знакомым: «Я могу без проблем останавливать работу любой программы, приложения». Овладев такими практическими навыками, вы сможете ещё сильнее «подружиться» с вашим компьютером.
Мне нужно освободить порт 8000, который занят windows .
Пытаюсь остановить по PID:
C:UsersUser>taskkill /PID 4 /F
Ошибка: Не удается завершить процесс с идентификатором 4.
Причина: Отказано в доступе.
После ввода команды netsh http show servicestate выводится:
Код сеанса сервера: FF00000020000001
Версия: 2.0
Состояние: Active
Свойства:
Макс. пропускная способность: 4294967295
Таймауты:
Таймаут тела объекта (сек): 120
Таймаут тела объекта стока (сек): 120
Таймаут очереди запросов (сек): 65535
Таймаут простоя подключения (сек): 120
Таймаут ожидания заголовка (сек): 120
Минимальная скорость отправки (байт/сек): 240
Группы URL-адресов:
Код группы URL-адресов: FE00000040000001
Состояние: Active
Имя очереди запросов: DefaultAppPool
Свойства:
Максимальная пропускная способность: унаследовано
Максимум подключений: 4294967295
Таймауты:
Таймаут тела объекта (сек): 120
Таймаут тела объекта стока (сек): 120
Таймаут очереди запросов (сек): 65535
Таймаут простоя подключения (сек): 120
Таймаут ожидания заголовка (сек): 0
Минимальная скорость отправки (байт/сек): 0
Сведения о журнале:
Каталог журнала: C:inetpublogsLogFilesW3SVC1
Формат журнала: 0
Конфигурация проверки подлинности:
Включенные схемы проверки подлинности:
Число зарегистрированных URL-адресов: 1
Зарегистрированные URL-адреса:
HTTP://*:80/
Код группы URL-адресов: FD00000040000001
Состояние: Active
Имя очереди запросов: ELMA3-CE
Свойства:
Максимальная пропускная способность: унаследовано
Максимум подключений: 4294967295
Таймауты:
Таймаут тела объекта (сек): 120
Таймаут тела объекта стока (сек): 120
Таймаут очереди запросов (сек): 65535
Таймаут простоя подключения (сек): 120
Таймаут ожидания заголовка (сек): 0
Минимальная скорость отправки (байт/сек): 0
Сведения о журнале:
Каталог журнала: C:inetpublogsLogFilesW3SVC2
Формат журнала: 0
Конфигурация проверки подлинности:
Включенные схемы проверки подлинности:
Число зарегистрированных URL-адресов: 1
Зарегистрированные URL-адреса:
HTTP://*:8000/
Подскажите , пожалуйста, как остановить этот процесс?