When you debug a multi-process program, TotalView adds processes to both a control and a
share group as the process starts. These groups are not related to either UNIX process groups or PVM groups. (See
Chapter 2, “About Threads, Processes, and Groups” for information on groups.)
Because a program can have more than one control group and more than one share group, TotalView decides where to place a process based on the type of system call—which can either be
fork() or
execve()—that created or changed the process. The two types of process groups are:
The parent process and all related processes. A control group includes children that a process forks (processes that share the same source code as the parent). It also includes forked children that subsequently call a function such as
execve(). That is, a control group can contain processes that don’t share the same source code as the parent.
TotalView automatically creates share groups when your processes fork children that call the
execve() function, or when your program creates processes that use the same code as some parallel programming models such as MPI do.
In Figure 153, assume that the
generate process doesn’t fork any children, and that the
filter process forks two child processes. Later, the first child forks another child, and then calls the
execve() function to execute the
expr program. In this figure, the middle column shows the names that TotalView uses.