Почему иногда Windows не может завершить процесс?

сейчас я пытаюсь запустить / отладить свое приложение в Visual Studio, но он не может его создать, потому что последний экземпляр app.vshost.exe по-прежнему работает. Затем, используя диспетчер задач, я пытаюсь убить его, но он просто остается там без сигнала активности.

помимо этого конкретного случая (возможно, ошибка Visual Studio), мне очень интересно узнать технические причины, почему иногда Windows не может убить процесс?

может, просвещенный разработчик, связанный с ОС, пожалуйста попробуем объяснить?

(и, пожалуйста, не начинайте битву Unix/Linux/Mac против Windows.)

23
задан ACK_stoverflow
14.01.2023 8:15 Количество просмотров материала 2822
Распечатать страницу

9 ответов

причина, как правило, некоторые не отвечает драйвер, который имеет незавершенный I / O выполняется запрос.

см. запись в блоге Марка Руссиновича Незавершаемых Процессов (архиве)

19
отвечен Ian Boyd 2023-01-15 16:03

одна из возможных причин: вы не можете убить задачу, прикрепленную к отладчику.

единственный способ остановить задачу - из самого отладчика.

14
отвечен harrymc 2023-01-15 18:20

одной из причин может быть то, что у вас нет разрешения убить его. Е. Г. если процесс запущен от имени администратора и вы обычный пользователь.

3
отвечен Brian Lyttle 2023-01-15 20:37

открыть свойства страница для проекта, перейдите к Debug tab и установите флажок "включить отладку неуправляемого кода". Или снимите флажок для использования процесса узла.

3
отвечен Tadjou 2023-01-15 22:54

Если последнее приложение.vshost.exe все еще работает, просто подключитесь к этому процессу с помощью отладчика.

должны быть найдены в меню Debug - >AttachToProcess затем выберите процесс зависания и подключиться к нему.

2
отвечен Oliver Friedrich 2023-01-16 01:11

мой единственный опыт разработки на уровне ОС был в аспирантуре, но я подозреваю, что происходит это (или что-то подобное):

произошла ошибка при запуске последнего экземпляра, который отладчик пытался обработать, но некоторые другие проблемы вызвали сбой (возможно, было обнаружено утверждение отладки, но прежде чем вы могли щелкнуть диалоговое окно, чтобы прервать/повторить/игнорировать, был вызван другой разрыв, возможно, из-за нулевого указателя). В результате, после остановки отладки, отладчик все еще ждал вашего ответа на первое утверждение отладки, поэтому он не позволил бы завершить процесс. Но затем отладчик завершился, когда вы остановили отладку (или сделали это?), превратив в зомби, или дерево в зомби. Когда вы пытались убить процесс зомби, произошла ошибка, подобная этой, но диспетчер задач не сказал вам об этом:

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 перерезала пуповину, поэтому теперь у вас есть два зомби-процесса. Вы не можете присоединить отладчик к процессу отладки, потому что уже (зомби) отладчик прилагается, и вы не можете присоединить отладчик к (зомби) отладчик, потому что, как Visual Studio будет сказать вам, когда вы попробовать:

невозможно подключиться к процессу. Операция не является законной в текущем состоянии.

зомби все еще находятся в таблице процессов достаточно хорошо, чтобы предотвратить запуск другого экземпляра через отладчик, но вы, вероятно, могли бы запустить другой экземпляр за пределами IDE просто отлично.

Это решает более конкретную проблему создания VS зомби-процесса. Но, зомби-процессы часто не умирают. Ну, часто на Windows, иногда на Linux, не до тех пор, пока вы снимаете их с дробовиком. Или это была остановка? Но остерегайтесь случайного применения ожидающих обновлений Windows.

Я был взволнован некоторыми из более ранних ответов, которые предлагали прикрепление с отладчиком, но выше результат, который я получил. Поэтому я отправляю свой ответ и перезагружаюсь, чтобы очистить таблицу процессов.

2
отвечен hlongmore 2023-01-16 03:28

возможно, изучение некоторых из приведенных здесь инструментов может привести к ответам?

https://stackoverflow.com/questions/49988/really-killing-a-process-in-windows

(только сейчас я обнаружил, что pskill был единственным из нескольких инструментов, которые могли убить процесс, работающий под Windows 7 сессии одного пользователя, из сеанса другого пользователя (или учетные данные, я полагаю.)

1
отвечен r_alex_hall 2023-01-16 05:45

вы можете!

используя ProcessHacker (щелкните правой кнопкой мыши на процессе) -> Терминатор.

-1
отвечен Valmond 2023-01-16 08:02

Если вы используете VS для отладки процесса, и вы убить его с помощью Диспетчера задач.Тогда VS не может справиться с этим хорошо.

Так что VS все еще отлаживает целевой процесс, но вы не можете просто нажать stop process в VS.Просто закройте VS, и вы увидите выход из процесса.

-1
отвечен VictorV 2023-01-16 10:19

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх