Сейчас я пытаюсь запустить / отладить мое приложение в Visual Studio, но оно не может его создать, потому что последний экземпляр app.vshost.exe
все еще работает. Затем с помощью диспетчера задач я пытаюсь убить его, но он остается там без сигнала активности.
Помимо этого конкретного случая (возможно, ошибки в Visual Studio), мне очень любопытны технические причины, по которым иногда Windows не может завершить процесс?
Может, опытный разработчик ОС, пожалуйста, попытайтесь объяснить?
(И, пожалуйста, не начинайте битву Unix / Linux / Mac против Windows.)
windows
process
visual-studio
kill
Нестор Санчес А.
источник
источник
Ответы:
Причиной обычно является не отвечающий драйвер, который имеет незавершенные запросы ввода-вывода .
См. Запись в блоге Марка Руссиновича « Неубиваемые процессы» ( архив ).
источник
Одна из возможных причин: вы не можете убить задачу, привязанную к отладчику.
Единственный способ остановить задачу - от самого отладчика.
источник
taskkill /f
, не сwmic ... call terminate
... он продолжает говорить "ошибка: процесс X с pid Y не может быть завершен . Нет запущенного экземпляра этой задачи. "Одной из причин будет то, что у вас нет разрешения убить его. Например, если процесс запущен от имени администратора, а вы обычный пользователь.
источник
Откройте страницу « Свойства» для проекта, перейдите на вкладку « Отладка » и установите флажок «Включить отладку неуправляемого кода». Или снимите флажок для использования процесса хоста.
источник
Если последний app.vshost.exe все еще работает, просто подключитесь к этому процессу с помощью отладчика.
Должен быть найден в меню под Debug-> AttachToProcess, затем выберите процесс зависания и подключитесь к нему.
источник
Мой единственный опыт разработки на уровне ОС был в аспирантуре, но я подозреваю, что происходит (или что-то подобное):
Произошла ошибка во время работы последнего экземпляра, который отладчик пытался обработать, но некоторые другие проблемы привели к сбою (возможно, возникло отладочное утверждение, но перед тем, как вы нажали на диалоговое окно, чтобы прервать / повторить / игнорировать, произошел другой разрыв , может быть из-за нулевого указателя). В результате после того, как вы прекратили отладку, отладчик все еще ждал вашего ответа на первое утверждение отладки, поэтому он не позволил завершить процесс. Но затем отладчик завершился, когда вы прекратили отладку (или сделали это?), Превратив процесс в зомби или его дерево в зомби. Когда вы пытались убить процесс зомби, произошла ошибка, похожая на эту, но менеджер задач не сказал вам об этом:
Если вы решите попробовать то же самое на родителе (в моем случае родителем был процесс отладчика, msvsmon.exe), он завершится неудачно так же:
Родитель был запущен IDE, но IDE перерезал пуповину, так что теперь у вас есть два процесса зомби. Вы не можете присоединить отладчик к процессу, который вы отлаживали, потому что к нему уже подключен (зомби) отладчик, и вы не можете присоединить отладчик к (зомби) отладчику, потому что, как Visual Studio скажет вам, когда вы попытаетесь :
Зомби все еще находятся в таблице процессов достаточно хорошо, чтобы помешать запуску другого экземпляра через отладчик, но вы, вероятно, вполне могли бы запустить другой экземпляр за пределами IDE.
Это решает более конкретную проблему наличия VS создать процесс зомби. Но процессы зомби часто не умирают. Ну, часто в Windows, иногда в Linux, пока вы не стреляете в них из дробовика. Или это было отключение? Но остерегайтесь случайного применения ожидающих обновлений Windows.
Я был взволнован некоторыми из более ранних ответов, которые предлагали присоединиться к отладчику, но вышеизложенный результат - мой результат. Поэтому я отправляю свой ответ и перезагружаюсь, чтобы очистить таблицу процессов.
источник
Возможно, проверка некоторых из приведенных здесь инструментов может привести к ответам?
/programming/49988/really-killing-a-process-in-windows
(Только сейчас я обнаружил, что pskill был единственным из нескольких инструментов, которые могли убить процесс, запущенный под сеансом Windows 7 одного пользователя, из сеанса другого пользователя (или, я полагаю, учетных данных).
источник
Вы можете!
Использование ProcessHacker (щелкните правой кнопкой мыши по процессу) -> Терминатор.
источник
Если вы используете VS для отладки процесса, и вы убиваете его с помощью диспетчера задач. Тогда VS не может справиться с этим хорошо.
Таким образом, VS все еще отлаживает целевой процесс, но вы не можете просто нажать кнопку остановки процесса в VS. Просто выйдите из VS, и вы увидите выход из процесса.
источник