Um pouco confuso. fork é uma chamada de sistema que cria um novo processo copiando a imagem do processo pai. Depois disso, se o processo filho quiser ser outro programa, ele chamará algumas das chamadas do sistema exec family, como execl . Se, por exemplo, você deseja executar ls no shell, o shell bifurca o novo processo filho, que chama execl("/bin/ls") .
Se você ver dois programas e seus pid são diferentes, verifique seus ppid (ids pai). Por exemplo, se p1 for ppid do processo cujo pid é p2 , isso significa que o processo cujo id é p1 bifurcou esse processo. Mas se o primeiro processo ' ppid não for o mesmo que o outro processo' pid , significa que o mesmo comando é executado duas vezes.
Se pid e ppid forem iguais, mas tid (id de thread) forem diferentes, significa que é um processo com 2 threads.
Acho que criar seu próprio shell é um bom ponto de partida.