Комбинация fork/exec

kombinaciya fork exec Системные инструменты параллельного выполнения

В примерах 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

Оцените статью
Секреты программирования
Добавить комментарий