Почему иногда Windows не может убить процесс?
Прямо сейчас я пытаюсь запустить / отладить мое приложение в Visual Studio, но он не может его создать, потому что последний экземпляр app.vshost.exe
все еще запущен. Затем, используя диспетчер задач, я пытаюсь его убить, но он остается там без сигнала активности.
Помимо этого конкретного случая (возможно, ошибка Visual Studio), мне очень любопытно узнать, почему иногда Windows не может убить процесс?
Может, просвещенный разработчик, связанный с ОС, попробуйте объяснить?
- Бесплатный / открытый редактор исходного кода. Интерфейс пользовательского интерфейса для .Net
- Использование библиотеки c ++ в c #
- GCC с Visual Studio?
- Как исправить ошибку компиляции Visual Studio, «несоответствие между архитектурой процессора»?
- Не удалось инициализировать систему конфигурации
(И, пожалуйста, не начинайте битву Unix / Linux / Mac с Windows.)
- Как я могу повысить производительность с новым предварительным просмотром Visual Studio 2013?
- VB.Net Передача значений в другую форму
- addFontFile из ресурсов
- Должен ли я компилироваться с / MD или / MT?
- Как установить путь к DLL-файлу в Visual Studio?
- где можно найти xsd.exe в visual studio 2013 на windowsх 8
- Сравните два файла в Visual Studio
- Использовать Visual Studio 2012 и компилироваться со старым набором инструментов платформы?
Причиной обычно являются некоторые безответственные драйверы, которые имеют незавершенные запросы ввода-вывода . http://blogs.technet.com/markrussinovich/archive/2005/08/17/unkillable-processes.aspx
Одна из возможных причин: вы не можете убить задачу, прикрепленную к отладчику.
Единственный способ остановить задачу – от самого отладчика.
Одна из причин заключается в том, что у вас нет разрешения убить его. Например, если процесс запущен как администратор, и вы обычный пользователь.
Откройте страницу « Свойства» для проекта, перейдите на вкладку « Отладка » и установите флажок «Включить неуправляемую отладку кода». Или снимите флажок, чтобы использовать хост-процесс.
Если последний файл app.vshost.exe все еще запущен, просто подключитесь к этому процессу с помощью отладчика.
Должно быть найдено в меню под Debug-> AttachToProcess, затем выберите процесс подвески и подключитесь к нему.
Возможно, рассмотрение некоторых из приведенных здесь инструментов может привести к ответам?
https://stackoverflow.com/questions/49988/really-killing-a-process-in-windows
(Только сейчас я обнаружил, что pskill был единственным из нескольких инструментов, которые могли бы убить процесс, выполняемый под сеансом Windows 7 одного пользователя, с другого сеанса пользователя (или учетных данных, я полагаю).
Мой единственный опыт разработки на уровне ОС был в школе градиента, но я подозреваю, что это происходит (или что-то подобное):
Произошла ошибка при запуске последнего экземпляра, который пытался обработать отладчик, но некоторая другая проблема привела к сбою (возможно, было обнаружено утверждение об отладке, но прежде чем вы могли щелкнуть по диалоговому окну Abort / Retry / Ignore, был вызван другой разрыв , Возможно, из-за нулевого указателя). В результате, после остановки отладки, было то, что отладчик все еще ожидал вашего ответа на первое утверждение отладки, поэтому он не позволил процессу завершить работу. Но тогда отладчик прекратил работу, когда вы остановили отладку (или сделали это?), Превратив процесс в зомби или его дерево в зомби. Когда вы пытались убить процесс зомби, произошла ошибка, аналогичная этому, но диспетчер задач не рассказал вам об этом:
C:\Windows\system32>taskkill /pid 9564 /f /t ERROR: The process with PID 9564 (child process of PID 22520) could not be terminated. Reason: There is no running instance of the task.
Если вы решите попробовать одно и то же на родительском (в моем случае родителем был процесс отладчика, msvsmon.exe), он не работает так же:
C:\Windows\system32>taskkill /pid 22520 /f /t ERROR: The process with PID 9564 (child process of PID 22520) could not be terminated. Reason: There is no running instance of the task. ERROR: The process with PID 22520 (child process of PID 13964) could not be terminated. Reason: There is no running instance of the task.
Родитель был запущен IDE, но IDE разрезал пуповину, так что теперь у вас есть два процесса зомби. Вы не можете присоединить отладчик к процессу, который вы отлаживали, потому что уже подключен отладчик (зомби), и вы не можете подключить отладчик к отладчику (zombie), поскольку, поскольку Visual Studio скажет вам, когда вы попробуете :
Не удалось подключиться к процессу. В текущем состоянии операция не является законной.
Зомби все еще находятся в таблице процессов достаточно хорошо, чтобы предотвратить запуск другого экземпляра через отладчик, но вы, вероятно, могли бы запустить другой экземпляр вне IDE просто отлично.
Это касается более конкретной проблемы, связанной с тем, что VS создает зомбический процесс. Но процессы зомби часто не умирают. Ну, часто в Windows, иногда в Linux, пока вы не стреляете в них с помощью дробовика. Или это остановка? Но будьте осторожны при случайном применении ожидающих обновлений Windows.
Я был в восторге от некоторых из более ранних ответов, которые предлагали установить с отладчиком, но приведенный выше результат я получил. Поэтому я отправляю свой ответ и перезагружаюсь, чтобы очистить таблицу процессов.
Ты можешь!
Использование ProcessHacker (щелкните правой кнопкой мыши на процессе) -> Terminator.