В примерах 5.1 и 5.2 дочерние процессы просто вызывали функцию в программе и завершали свою работу. В Unix-подобных платформах ветвление часто служит основой для запуска программ, выполняющихся независимо и совершенно отличных от программы, вызвавшей функцию fork. Так, в примере 5.3 ответвление новых процессов также выполняется, пока не будет нажата клавиша q, но в дочерних процессах вместо вызова функции в том же файле запускается совершенно новая программа.
Пример 5.3. PP4E\System\Processes\fork-exec.py
“запускает программы, пока не будет нажата клавиша ‘q’”
import os
parm = 0 while True:
parm += 1
pid = os.fork()
if pid == 0: # копия процесса
os.execlp(‘python’, ‘python’, ‘child.py’, str(parm)) # подменить прогр. assert False, ‘error starting program’ # возврата быть
# не должно else:
print(‘Child is’, pid) if input() == ‘q’: break
Если вы достаточно много занимались разработкой программ для Unix, комбинация функций fork/exec наверняка будет вам знакома. Главное, на что следует обратить внимание, — это функция os.execlp. В двух словах, эта функция замещает программу, выполняющуюся в текущем процессе, новой программой. Поэтому комбинация функций os.fork и os.execlp означает запуск нового процесса и запуск новой программы в этом процессе. Другими словами — запуск новой программы параллельно оригинальной.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011