Без &
оболочка разветвляется, вызывает execve
в дочернем процессе, чтобы запустить задачу, и через wait
или waitpid
ожидает завершения дочернего процесса (который приостанавливает оболочку), а не делать что-то еще.
При запуске фоновой задачи оболочка снова разветвляется, вызывает execve
, чтобы запустить задачу в дочернем процессе, но не ждет ее завершения и скорее возвращает элемент управления сразу после запуска задачи.