С самого начала позвольте мне сказать, что я пытаюсь избежать использования pcntl_fork()
Для этого примера давайте представим, что я пытаюсь разветвить многие экземпляры приложения командной строки 'dig'. В действительности один и тот же скрипт будет использоваться для разных приложений командной строки.
Сейчас я использую php exec и добавляю & к команде, чтобы bash запускал ее в фоновом режиме.
Например,
exec("dig google.com &");
exec("dig yahoo.com &");
и так далее ...
Это успешно создает несколько процессов dig , работающих параллельно.
Проблема, с которой я столкнулся, заключается в том, что число процессов неуклонно растет до тех пор, пока система не выйдет из строя. По сути это вилочная бомба.
Я пытался бороться с этим, проверяя количество запущенных процессов, используя ps ax | wc -l
и только запуск больше, если он ниже X.
Eg (работает по петле)
if 80 processes are running, i'll launch another 20.
if 70 processes are running, i'll launch another 30.
Проблема в том, что даже с этой проверкой число процессов продолжает расти до тех пор, пока система не выйдет из строя или не ударит по операционным системам max пользовательских процессов
Может кто-нибудь дать мне несколько советов о том, как я могу эффективно (массово) форкать, не изнасилуя все системные ресурсы? Я не понимаю, почему этот метод не работает.