use "bitcoind stop" or any equivalent through the JSON-RPC interface.
By the way most of the shutdown time is spent in the database logs cleanup. You can somewhat speed this up by defragmenting all the *.dat files. Significant further speed-up is achieved by the reorganization of blkindex.dat: use db_dump & db_restore; just be careful to set the DB_CONFIG correctly.
Meanwhile, for any newbies like me...
To get usage and options:
bitcoind -? #whether bitcoind is running or not
To get a list of commands:
bitcoind help #when bitcoind is running