Por que o arquivo exec gera 4 processos no Linux? [fechadas]

0

Eu construo minha fonte de modelo RTAI (gerada pelo simulink) no CygWin com o gcc-linux-4.1 (compilador cruzado do CygWin) no Windows e gero o ELF com sucesso. e o ELF é executado corretamente no Ubuntu.

Depois que o ELF está sendo executado corretamente no Ubuntu, existem quatro processos com o mesmo nome, mas diferentes id de processo no monitor do sistema.

Mas se eu construir minha fonte com gcc no Linux, ela gerará apenas 1 processo, então acho que fork() ou exec() não pode ser chamado.

Como um arquivo exec pode fazer quatro processos?

O ps -elF mostra:

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root      3679  3314  0  57   - -  4362 hrtime 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3680  3679  0  57   - -  4362 poll_s 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3681  3680  0  56   - -  4362 rt_sch 17:44 pts/1    00:00:00 /root/Test/test
5 S root      3682  3680  0 -40   - -  4362 rt_sch 17:44 pts/1    00:00:00 /root/Test/test
    
por YangH 30.05.2013 / 11:43

1 resposta

2

É perfeitamente normal que determinados processos criem outras cópias de si mesmos após a execução, geralmente para melhorar o desempenho por meio da execução paralela. Quanto ao funcionamento, o fork do processo (2) (pode ou não também executar (2) outra cópia de si mesmo, dependendo da forma como é implementado). Veja man 2 fork e man 2 exec .

Essencialmente, novos processos no Linux são criados como cópias do programa, chamando-os usando fork (2). Depois disso, eles podem substituir sua imagem de processo usando exec (2). Esse é o fluxo de trabalho usual ao usar, por exemplo, um shell para executar comandos. Se for o mesmo processo, pode não haver exec subsequente - também é possível ter código executado que esteja condicionado a estar em um determinado filho sem ter que executar.

A Universidade de Cambridge tem uma boa página sobre como isso funciona se você quiser mais informações.

    
por 30.05.2013 / 11:48