 <p>As you say, Go's syscall package has this function:</p> <pre><code>func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) </code></pre> <p>That seems to work for you. From <a href="http://www.manpages.info/freebsd/wait.2.html" rel="nofollow">the BSD man page for <code>wait(2)</code></a> (remember that Go was developed partly on Macs!):</p> <blockquote> <p>The wait4() call provides a more general interface for programs that need to wait for certain child processes, that need resource utilization statistics accumulated by child processes, or that require options. <strong>The other wait functions are implemented using wait4()</strong>.</p> </blockquote> <p>By passing the right arguments, you can achieve what you want with <code>Wait4</code>. For example, if you don't want to wait for a specific child:</p> <blockquote> <p>If pid is -1, the call waits for any child process.</p> </blockquote> <p>You can find the rest of the information you need in the man page.</p>