I'd like to learn how to decide which approach to multi-process design to use in my software, e.g. how to decide if I should use a daemonized process with client processes connecting on demand, a parent-child processes connected all the time, or any other pattern relevant to multi-process design.
I searched for resources but couldn't find anything satisfying.
Well, there's nothing like answering your own question.
In short, I came across 3 books that helped me understand the issues of multitasking and multiprocessing. Surprisingly (or not), these are quite old books focusing on the domain of real-time programming.
The first I recommend "System Design with Ada" (1984) by Raymond J. A. Buhr. In chapter 3, the author shows step by step what to pay attention to when analyzing a problem in order to arrive at the right structure of tasks (processes). As the title indicates, Buhr uses the Ada language to model the problem and implement solutions. The author has also written a book in which he uses C/C++ : "An Introduction To Real-Time Systems: From Design To Multitasking With C/C++".
The third book that helped me understand multitasking analysis and design is a book by David L. Ripps' 1989 "An Implementation Guide To Real-Time Programming". In particular, chapter 4 focuses on the aforementioned issues.
System Design with Ada, R.J.A Buhr, 1984
https://archive.org/details/systemdesignwith0000buhr/page/46/mode/2up
An Introduction To Real-Time Systems: From Design To Multitasking With C/C++, R.J.A Buhr, 1998
https://archive.org/details/introductiontore0000buhr/page/54/mode/2up
An Implementation Guide To Real-Time Programming, David L. Ripps, 1989
https://archive.org/details/implementationgu0000ripp/page/40/mode/2up