Редактировать: Похоже на дубликат, но я уверяю вас, это не так. Я хочу убить текущий текущий процесс, а не убивать отдельный процесс.
Проблема заключается в том, что процесс, который я убиваю, не генерируется подпроцессом или exec. Он в основном пытается убить себя.
Здесь сценарий: программа выполняет очистку при выходе, но иногда это занимает слишком много времени. Я уверен, что я могу завершить программу, потому что первый шаг в quit сохраняет базу данных. Как мне это сделать?
tskill также не работает
win32api.TerminateProcess(handle, 0) работает, но я обеспокоен тем, что это может вызвать утечку памяти, потому что у меня не будет возможности закрыть дескриптор (программа сразу останавливается после вызов TerminateProcess). примечание: Да, я вынужден отказаться от него, поэтому обязательно будут какие-то несвободные ресурсы, но я хочу как можно меньше свести к минимуму это (поскольку я буду делать это только в том случае, если это займет невыносимое количество времени, для лучшего пользователя опыт), но я не думаю, что python будет обрабатывать gc, если он принудительно завершает работу.
В настоящее время я делаю последнее, так как он работает. Я беспокоюсь о том, что у нас есть неплохая ручка. Любые мысли/предложения были бы очень оценены!
win32api.TerminateProcess(handle, 0) работает, но я обеспокоен тем, что это может вызвать утечки памяти, потому что у меня не будет возможность закрыть ручку (программа сразу останавливается после вызов TerminateProcess). Примечание: Я вынужден покинуть его, чтобы обязанные быть определенными ресурсами, но я хочу свести к минимуму это возможно (поскольку я буду делать это только в том случае, если он принимает невыносимое количество времени, для лучшего удобства пользователей), но я не думаю, что python будет обрабатывать gc, если это принудительное закрытие.
Если процесс самостоятельно завершается, вам не нужно беспокоиться о сборке мусора. ОС автоматически очистит все ресурсы памяти, используемые этим процессом, поэтому вам не нужно беспокоиться о утечке памяти. Утечки памяти - это когда процесс выполняется и с течением времени использует все больше и больше памяти.
Итак, да, завершение вашего процесса таким образом не очень "чистое", но там не будет никаких побочных эффектов.
TerminateProcess и taskkill/f не освобождают ресурсы и приводят к утечкам памяти. Вот ссылка MS на terminateProcess: {... Прекращение процесса не приводит к прекращению дочерних процессов. Завершение процесса не обязательно удаляет объект процесса из системы. Объект процесса удаляется, когда последний дескриптор процесса закрыт....} MS сильно использует COM и DCOM, которые разделяют дескрипторы и ресурсы, которые ОС не выполняет и не могут отслеживать. Вместо этого следует использовать ExitProcess, если вы не собираетесь часто перезагружаться. Это позволяет процессу правильно освобождать ресурсы, которые он использовал. Linux не имеет этой проблемы, поскольку он не использует COM или DCOM.
Если я понимаю ваш вопрос, вы пытаетесь закрыть программу. Обычно это делается с помощью sys.exit().