Currently the best way to achieve this (although it does not work for Windows) is by using the command call-process with the destination argument set to 0 (see https://www.gnu.org/software/emacs/manual/html_node/elisp/Synchronous-Processes.html).
E.g. to start firefox you could use:
(call-process "firefox" nil 0 nil "www.spacemacs.org")
Something like this:
(process-id (get-buffer-process (current-buffer)))
should do it. You can replace the call to current-buffer by some other means of identifying the buffer of interest, and you should probably check that the result of get-buffer-process is not nil.