I have a number of command line scripts in PHP that use exec() to perform tasks such as restarting services, loading MySQL timezone files, etc. While exec() itself does not
Redirecting to /dev/null does not cause PHP to stop waiting for the command. Adding a & does do this, you probably associate the two because the final & is often used in conjunction with a redirect.
In response to Yannick's (deleted) comment: it seems if you want to run something in the background in PHP, you must redirect as well as using &. This does not mean that redirection alone causes it to run in the background.