Olezhka
Я правильно логику понял? Если да, то как же ты тогда говоришь, что “Не надо проверять никакие процессы”?
Если тебе не нужна устойчивость к падениям системы, то тебе не нужно анализировать процессы. Достаточно только файл проверить на наличие и создать при запуске и удалить при завершении и всё.
Если тебе нужна устойчивость к падениям системы, то тебе нужно дополнительно инфу про процессы анализировать. Соответственно, без файла этого ты никак это не сделаешь, потому что программе B надо помнить как-то о том, что было падение системы и оно было именно в тот момент, когда программа A ещё работала. Понимаешь, падение системы может быть и при незапущенной программе A. Если падение системы было при незапущенной программе A, тогда не надо это падение учитывать при запуске программы B. Соответственно, как программа A во время своей работы может понять, что произошло падение системы? Никак. Но когда программа B запускается, она может проверить, было ли падение по тому, что 1) прошлый запуск программы A был, 2) что прошлый запуск программы A не завершился правильно. А как программа B поймёт, что прошлый запуск программы A был? Только по какому-то признаку, по каким-то следам. И вот этот файл - это вот этот след.
Если файл есть, то программа B видит, что либо программа A работает, либо программа A работала и упала. Тогда программа B проверяет, работает ли программа A в данный момент. Для этого программа B открывает файл и читает его. А в файле программа A записала
свой номер процесса. Тогда если этот номер процесса вообще есть в системе и, если он есть в системе, процесс с этим номером содержит имя python.exe, и командная строка процесса ведёт к программе A, тогда программа B видит, что программа A работает, и тогда программа B завершается. Но если программа B не видит файла; либо программа B видит файл и номера процесса из файла нет в системе; либо номер процесса файла есть в системе, но имя этого процесса с этим номером не python.exe; либо там имя процесса python.exe, но командная строка ведёт не к тому исходному файлу; - тогда программа B перезаписывает файл
своим номером процесса и продолжает работать. Теперь программа B становится программой A.
Эта штука даёт имена процессов
https://psutil.readthedocs.io/en/latest/#psutil.process_iterЭта штука даёт командную строку процесса
https://psutil.readthedocs.io/en/latest/#psutil.Process.cmdlineПосле падения системы и перезагрузки вряд ли ты даже номер того же процесса найдёшь потом. Но если ты его находишь, потому что программа B у тебя запускается не сразу, а через несколько часов, например, когда система поработала долгое время, то есть вторая проверка, является ли этот номер процессом python.exe. Но он может являться этим процессом, если у тебя много всяких скриптов на питоне в системе. Но тогда ты обращаешься уже к командной строке процесса и по ней уже видно, тот это скрипт или не тот это скрипт. Каждое из этих действий имеет вероятность 0.5, а все они вместе имеют вероятность 0.5 * 0.5 * 0.5 = 0.5 ^ 3 = 0.125. То есть то, что ты дойдёшь вообще до проверки командной строки, составляет 12.5%. Это о-о-очень редкая фигня. Оно прямо на проверке номера процесса будет завершаться практически всегда.