Algo que quería rectificar es que siempre la salida va a ser de 8 líneas, pues se crean 7 procesos (aparte del original) y todos van a ejecutar necesariamente la línea printf("P%d", getpid()). En Perl, un programa equivalente podría ser:
use strict;
use warnings;
use POSIX qw(getpid);
fork();
fork();
fork();
printf "%Pd\n", getpid();
Podemos ejecutarlo desde la consola como
$ perl -MPOSIX -e 'fork; fork; fork; printf "P%d\n", getpid()'
O sabiendo que $-$ es una variable predefinida de Perl que tiene el pid del proceso actual, es equivalente a:
$ perl -le 'fork; fork; fork; print "P$-$"'
Escribo "$-$" con un guión en medio porque de lo contrario el editor me lo toma como un tag para escribir código latex y se ve mal, pero es dos signos de pesos sin guión entre medio. La salida que obtuve, fue:
[pablo@localhost ~]$ perl -le 'fork; fork; fork; print "P$-$"'
P15322
P15323
[pablo@localhost ~]$ P15327
P15326
P15325
P15324
P15329
P15328
Cuando el proceso original no es el último en terminar, la shell imprime el prompt inmediatamente y la salida queda un poco rara :P.
Saludos.