First, why TObjectList instead of TStringList when you need a name?
2 Leledumbo: you don't need thread safety for TProcess unless threads involved (f.i. for poll purposes).
Start each process asynchronously (unset poWaitOnExit in Options).
To maintain list actuality, use polling "garbage collection" procedure f.i. using TTimer, check each TProcess.Running. If not, free process manually (or use OwnsObjects) and remove it from list.
If you don't need real-time usage (visualization?) of list, you don't need poll at all. Run "garbage collection" when you search/create new process.