Так же, как при вводе в командной оболочке, строка аргументов, передаваемая функции os.execlp сценарием fork—exec из примера 5.3, запускает еще один файл программы Python, который приводится в примере 5.4.
Пример 5.4. PP4E\System\Processes\child.py
import os, sys
print(‘Hello from child’, os.getpid(), sys.argv[1])
Ниже показано, как этот программный код действует в Linux. Он не сильно отличается от оригинала fork1.py, но в действительности запускает новую программу в каждом ответвленном процессе. Наиболее наблюдательные читатели заметят, что идентификаторы ID дочернего процесса, отображаемые родительской программой и запущенной программой child.py, одинаковые — функция os.execlp просто замещает программу в том же самом процессе:
[C:\…\PP4E\System\Processes]$ python fork-exec.py
Child is 4556
Hello from child 4556 1
Child is 5920
Hello from child 5920 2
Child is 316
Hello from child 316 3
q
В языке Python существуют и другие способы запуска программ, помимо комбинации fork/exec. Например, функции os.system и os.popen и модуль subprocess, с которыми мы познакомились в главах 2 и 3, позволяют выполнять команды оболочки. Функция os.spawnv и пакет multiprocessing, с которым мы познакомимся далее в этой главе, позволяют запускать независимые программы и процессы более переносимым способом. Далее мы увидим, что в некоторых ситуациях модель порождения процессов с помощью пакета multiprocessing может использоваться как переносимая замена функции os.fork (хотя и менее эффективная) и применяться в соединении с функциями os.exec*, показанными здесь, для достижения того же эффекта в стандартной реализации Python для Windows.
Далее в этой главе будут представлены другие примеры ветвления процессов, особенно много — в разделах, посвященных приемам завершения процессов и организации взаимодействий между ними, поэтому мы здесь ограничимся уже приведенными примерами. В следующих главах этой книги мы также рассмотрим другие темы, относящиеся к процессам. Например, в главе 12 мы снова вернемся к приему ветвления процессов, чтобы разобраться с зомби — «мертвыми» процессами, затаившимися в системных таблицах после своего конца. А теперь перейдем к потокам выполнения — к теме, которую по крайней мере некоторые программисты находят значительно менее пугающей…
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011