Обе упомянутые вами операционные системы основаны на Unix / Linux и, следовательно, реализуют один и тот же fork()
ing API.
A fork()
полностью дублирует объект процесса вместе с его памятью, загруженным кодом, дескрипторами открытых файлов и потоками. Более того, новый процесс обычно использует один и тот же объект процесса в ядре до первой операции записи в память. В основном это означает, что локальные структуры данных также копируются в новый процесс вместе с локальными переменными потока. Таким образом, у вас все еще есть те же структуры данных, и l.x
все еще определено.
Чтобы сбросить структуры данных для нового процесса, я бы порекомендовал функции запуска процесса сначала вызвать некоторый метод очистки. Например, вы можете сохранить pid родительского процесса с помощью process_id = os.getpid()
и использовать
if process_id != os.getpid():
clear_local_data()
В основной функции дочернего процесса.