I respond to myself to the first part of my question.
If you want to synchronize in the cgroup creation to complete just
wait for the JobRemoved bus signal for the job returned by
StartTransientUnit().
StartTransientUnit returns a string to a job object path. To call JobRemoved I need the job id, so the easier way to get it is to strip the last part of the returned string from StartTransientUnit job object path. Am I right?
False, the JobRemoved signal returns the id, job, unit and result. To wait for JobRemoved only needs a matching rule for this signal. The matching rule can just contain the path. In fact, nothing else than strings can be matched in a rule, so I may be only able to use the path.