Попробуйте использовать popen () вместо exec ().
Этот хак будет работать на любой стандартной установке PHP, даже на Windows, никаких дополнительных библиотек не требуется. Вы действительно не можете контролировать все аспекты процессов, которые вы порождаете таким образом, но иногда этого достаточно:
$p1 = popen("/bin/bash ./some_shell_script.sh argument_1","r");
$p2 = popen("/bin/bash ./some_other_shell_script.sh argument_2","r");
$p2 = popen("/bin/bash ./yet_other_shell_script.sh argument_3","r");
Три порожденных сценария оболочки будут работать одновременно, и пока вы не сделаете pclose ($ p1) (или $ p2 или $ p3) или не попытаетесь прочитать ни один из этих каналов, они не заблокируют ваш Выполнение PHP.
Когда вы закончите с другими вещами (теми, что вы делаете со своим PHP-скриптом), вы можете вызвать pclose () на каналах, и это приостановит выполнение вашего скрипта, пока не завершится процесс, который вы выполняете. Тогда ваш скрипт может сделать что-то еще.
Обратите внимание, что ваш PHP не завершится и не умрет (), пока эти сценарии не будут завершены. Достижение конца скрипта или вызов die () заставит его ждать.