bash-4.3$ ps -j | cat
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4600 4600 4586 pts/1 00:00:00 ps
4601 4600 4586 pts/1 00:00:00 cat
bash-4.3$ ps -j; ps -j
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4602 4602 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4603 4603 4586 pts/1 00:00:00 ps
Um job de shell interativo é implementado com um grupo de processos. É para isso que grupos de processos foram criados para: executar tarefas de shell interativas. Os shells interativos são os únicos comandos que realmente se misturam aos grupos de processos.
Acima de ps -j | cat
é um trabalho (em primeiro plano). Tanto ps
como cat
estão no mesmo grupo de processos, o shell fez dele o grupo de processos em primeiro plano do terminal, de forma que um ^C
faça com que um SIGINT seja enviado para eles.
No segundo exemplo, dois trabalhos consecutivos.
Em
bash-4.3$ (ps -j; ps -j)
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4634 4633 4586 pts/1 00:00:00 ps
PID PGID SID TTY TIME CMD
4586 4586 4586 pts/1 00:00:00 bash
4633 4633 4586 pts/1 00:00:00 bash
4635 4633 4586 pts/1 00:00:00 ps
O subshell é um trabalho. O subshell em si pode ser visto como um shell não interativo.