Я хочу, чтобы дочерний процесс не выполнял оставшийся родительский код после его разветвления.
Я достигаю этого, явно выходя из дочернего процесса, проверяя идентификатор процесса, возвращаемый os.fork()
, как в примере ниже:
def fork_and_exit(fork_target):
print("Inside fork_and_exit()")
new_fork_id = os.fork()
if(new_fork_id == 0):
fork_target()
sys.exit(0) #this prevent child from executing code below
#after returning from fork_target()
print("Exiting fork_and_exit()")
sys.exit(0)
def dummy_fork_target():
print("Dummy fork target!!!")
fork_and_exit(dummy_fork_target)
Вывод выше выглядит следующим образом:
Inside fork_and_exit()
Exiting fork_and_exit()
Dummy fork target!!!
Вопрос в том, если выше fork_and_exit()
правильно построить? Я имею в виду, что это правильный способ, и люди делают это только таким образом, или я без необходимости заново изобретаю колесо, и есть другой хорошо известный / предпочтительный подход для достижения этого, который я упускаю.