Quais chamadas do sistema podem criar um novo processo?

3

Ao executar o comando ps em meu sistema Linux, vejo alguns processos do usuário duas vezes (PID diferente ...). Eu me pergunto se eles são novos processos ou threads do mesmo processo. Conheço algumas funções na biblioteca C padrão que poderiam criar um novo processo como fork() . Gostaria de saber quais funções concretas podem fazer um processo aparecer duas vezes quando executo o comando ps porque estou procurando no código-fonte onde o novo processo ou thread é criado.

    
por MABC 26.11.2013 / 15:08

1 resposta

5

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.

    
por 26.11.2013 / 16:08