Here's a simple way to learn about processes, print a list of current processes before I turn off the controller and motors, and then print a list after they start. There wmic team to complete the task ...
C:\>wmic process get description,executablepath
Interestingly, the controller receives 5 python processes, and each engine creates another python process. Therefore, from this study, I also learned that the engine is its own process, as well as the controller ...
C:\>wmic process get description,executablepath | findstr ipengine ipengine.exe C:\Python34\Scripts\ipengine.exe ipengine.exe C:\Python34\Scripts\ipengine.exe C:\>wmic process get description,executablepath | findstr ipcontroller ipcontroller.exe C:\Python34\Scripts\ipcontroller.exe
In appearance, they all seem autonomous, although I do not think that the list of running OS processes contains any information about how the processes are related to the parent / child relationship. It can only be a formalism of a developer who has no idea that is tracked in the OS, but I donβt know about these types, to know in any case. 
Here is definitely a quote from MinRK, which directly addresses this question:
"Each engine is a separate process ... Each core is a separate process and can be on any machine ... It looks like you started an IPython session on the terminal, and each engine is a separate IPython session. If you do a = 5 in this, a = 10 in this, this guy has 10, this guy has 5. "
Here is another final validation based on the big SE Hot Net Question on ServerFault, which mentioned the use of ProcessExplorer, which actually tracks parent child processes ...
Process Explorer is a Sysinternals tool supported by Microsoft. This can display the command line of the process in the process of the properties dialog, as well as the parent who started it, although the name of this process can no longer be accessed. --Corrodias
If I started more engines in another command window, then the ProcessExplorer section simply duplicates what you see in the screenshot. 
And just for the sake of completeness, this is what the ipcluster start --n=5 command looks like ... 