Какие преимущества имеет конечное задание перед конечным процессом?
Из того, что я знаю, каждый раз, когда мы хотим остановить приложение (или замороженное приложение), мы запускаем TaskManager, выбираем приложение, Go to Process
и прекратить процесс. "Завершающий процесс" предпочтительнее "Завершающего задания" (иногда "Завершающее задание" все равно не работает).
Изображение для End Task:
Изображение для завершения процесса:
Однако http://technet.microsoft.com/en-us/library/bb726964.aspx:
Изучая процессы, обратите внимание, что хотя приложения имеют основной процесс, одно приложение может запускать несколько процессов. Как правило, эти процессы зависят от основного процесса приложения и останавливаются, когда вы завершаете основной процесс приложения или используете End Task. Из-за этого вы обычно хотите завершить основной процесс приложения или само приложение, а не зависимые процессы.
Они говорят, что предпочтительнее "Завершить задачу", потому что процесс останавливается, когда я останавливаю приложение. Но я совсем не понимаю их логику. Почему бы просто не остановить процесс?
Какие преимущества делает Ending Task
иметь более Ending Process
?
4 ответа
Для программ, имеющих хотя бы одно окно, End Task делает то же самое, что и нажатие кнопки "Закрыть" X - отправляет WM_CLOSE
сообщение в это окно, с просьбой красиво закрыть. (Для консольных окон, эквивалент CTRL_CLOSE_EVENT
.) Программа может предложить пользователю сохранить изменения или выполнить различные задачи очистки. Если процесс соответствует, диспетчер задач ждет несколько секунд и продолжает работу, если процесс все еще выполняется.
Если процесс заморожен или иным образом не обрабатывает сообщения окна, которые он получает, то, конечно, ни кнопка " Завершить задачу", ни кнопка "Закрыть" не могут работать. В таких случаях Windows, как правило, просит вас принудительно завершить программу, но только после того, как она предоставит программе достаточно времени для ответа.
Между тем кнопка " Завершить процесс" не связана с задачами или окнами - она вызывает TerminateProcess()
и Windows немедленно уничтожает процесс, не уведомляя об этом и не предоставляя ему возможности для очистки.
(Такие ресурсы, как память, освобождаются автоматически после завершения процесса; однако, если программа создала их, могут остаться различные временные файлы, и, конечно, существует риск повреждения данных, если процесс завершается в процессе сохранения данных.)
Смотрите также:
- Визуальная Студия Журнал. Убить приложение осторожно
Два других ответа прекрасно объясняют, в чем разница с точки зрения того, что происходит, но просто чтобы показать, как они различаются с точки зрения того, как это происходит, первый приказывает программе закрыться, а второй говорит Windows убить программа.
Как аналогия, это похоже на разницу между тем, чтобы попросить кого-нибудь собрать свои вещи и покинуть комнату, и сказать вышибалу, чтобы тот немедленно и насильно вытолкнул их.
Для уточнения: End Task попытается изящно закрыть приложение. Если он завис, он даст вам возможность "закончить сейчас". Это дает вам два преимущества по сравнению с уничтожением процесса (который просто перебивает его):
- включает восстановление после сбоя для приложений, которые зарегистрированы в Windows Vista (и выше) Краткое описание MSDN
- позволяет отправить сообщение об ошибке
Это просто несоответствие в терминологии. Вероятно, справочная служба Microsoft на западном побережье говорит о задаче, а на восточном побережье используется технически правильный процесс.
Технически это все еще завершает процесс. Задача - это, вероятно, оболочка процесса, показывающего окно? Помощь диспетчера задач тоже не определяет.