The garbage collector runs the thread that triggered garbage collection, on the very same process. It stops all current thread, and executes itself. It doesn't start another process for sure, you would have seen that in Windows.
From MSDN:
Before a garbage collection starts, all managed threads are suspended except for the thread that triggered the garbage collection.
(This applies to workstations only, as pointed out by DrKoch). Servers have a background thread running for garbage collection.
If you search in the referenced documentation for "Concurrent garbage collection", you will the text "GC thread", which supporting this.
You can force to run garabage collection in a separate thread, if you want to. Put this in your app.config
:
<configuration>
<runtime>
<gcServer enabled="true"/>
</runtime>
</configuration>
(from this answer)
Also read The .NET Framework 4.5 includes new garbage collector enhancements for client and server apps, as suggested by Adam Houldsworth, about changes in the way the garbage collector works since .NET 4.5.