Каков точно риск при использовании TerminateProcess?

Верхний регистр может обеспечить усиление в видимости ключевого слова, но можно компенсировать с выделением кода и добавлением отступа.
Мы используем нижний регистр, потому что редактор запросов и другие инструменты делают чудеса в редактировании t-кода-SQL, и мы не видим потребности подвергнуть пыткам мизинец.

5
задан Bill the Lizard 18 September 2009 в 22:01
поделиться

4 ответа

Обычно плохие вещи происходят при взаимодействии с объектами вне вашего процесса. Например, у вас есть некоторая общая память, используемая несколькими процессами, в которые ваш процесс будет писать, а другие процессы читают и / или записывают. Обычно для синхронизации чтения и записи используется мьютекс. Если поток в вашем процессе получил мьютекс и находится в процессе внесения изменений при вызове TerminatePorcess, мьютекс будет отменен, и общая память потенциально останется в несогласованном состоянии.

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

5
ответ дан 18 December 2019 в 07:30
поделиться

На основе документации для этого и ExtiProcess кажется, что основная проблема заключается в том, что DLL выгружаются без вызова DllMain с флагом DLL_PROCESS_DETACH.

Мои 2cents: В документации есть паранойя, что вы нарушите некоторую критическую операцию, выполняемую в DllMain + DLL_PROCESS_DETACH. Любой, кто зависит от этого для поддержания критического состояния, уже находится во власти диспетчера задач, поэтому я не вижу большого риска в использовании этого API.

6
ответ дан 18 December 2019 в 07:30
поделиться

AFAIK, если вы не делаете ничего «необычного» (что включает, но не ограничивается: создание потоков, блокировки , Подключения к БД, с использованием COM-объектов) ничего страшного не произойдет. Но, как Эрвикер говорит , вы не знаете , что делает DLL в масштабе ОС, и вы, конечно, не знаете, изменится ли это в будущем, поэтому полагайтесь на это очень хрупко.

Вам не любопытно узнать, почему происходит это нарушение доступа? Это вполне может быть признаком того, что было испорчено намного раньше.

6
ответ дан 18 December 2019 в 07:30
поделиться

Это зависит от того, как вы интерпретируете «глобальные данные». Если вы понимаете, что это означает (как я обычно это делал) данные, хранящиеся в адресном пространстве процесса, тогда совет не имеет смысла - мы знаем, что память исчезнет, ​​так кого волнует, что с этим произойдет?

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

4
ответ дан 18 December 2019 в 07:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: