The following diagram from APUE leads me to wonder: in a process session, does the process group of the session leader contain only the session leader and no other process?
-
Any process created by
fork()
will inherit the same process group and session from its parent. So can the session leader fork arbitrary number of processes into its own process group? -
For example, is a shell (when it is a session leader) the only process in its process group? If yes, is it because when the shell forks a child process, the child is initially in the same process group as the shell, but then immediately starts a new process group by calling
setpgid()
?
Thanks.
Best Answer
No, there's no such restriction. If it was the case, commands that don't implement job control (in practice, only shells do) wouldn't be able to fork a process (as child processes inherit the process group) when started as
xterm -e that-command
for instance.Even when the session leader is an interactive shell with job control enabled, you can have other processes in its group.
Running:
And in that
xterm
:Most commands run from an interactive shell are run in separate process groups, but it's not the case for all.
For instance, in
bash
:Or the processes started as part of prompt expansions: