Por que o PPID é diferente ao abrir do terminal e ao abrir pelo doubleclicking

0

Estou usando o Linux. Quando eu abri o programa gedit no gnome-terminal pelo comando gedit, ele abriu o editor gráfico de texto gedit. então o gedit tem PPID bash

    ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
    ashokkr+  1682   820  3 04:09 pts/6    00:00:00 gedit
    ashokkr+  1695  1568  0 04:09 pts/9    00:00:00 grep --color=auto gedit

aqui 820 é o PID de bash

ashokkr+   820 32505  0 03:32 pts/6    00:00:00 bash

mas quando eu abri o mesmo gedit clicando duas vezes no ícone do gedit.

ashokkrishna@ashokkrishna-Lenovo-B560:~$ ps -eaf | grep gedit
ashokkr+  1855  1982 14 04:16 ?        00:00:00 /usr/bin/gedit

Eu tenho o PPID 1982 que é init

1982 ?        00:00:00 init

Agora, minha pergunta é por que o processo pai é diferente nos dois casos?
qual é o processo exato inicia processos usuário ?

    
por ashok 06.12.2014 / 23:52

1 resposta

2

O que você está vendo não deve surpreendê-lo. Você iniciou gedit duas maneiras diferentes, por meio de dois pais diferentes, então, é claro, o PPID - ID do processo pai - é diferente nos dois casos.

O primeiro é filho do Bash, porque você o iniciou a partir de uma linha de comando do Bash.

O processo inicial do segundo filho será o sistema GUI do seu sistema operacional, mas porque ele está sendo bifurcado em segundo plano, fica órfão, então o init o adota. Esta é a forma padrão de lidar com processos órfãos em um sistema Unix / Linux.

O shell (Bash) simplesmente não está envolvido no segundo caso. O Bash é um filho do Gnome Terminal, que será iniciado por algum componente principal do sistema. Eu vejo upstart como o pai na minha caixa Ubuntu 14.10, mas isso irá variar em diferentes sistemas Linux e Unix. Quando o terminal fecha, Bash, assim como quaisquer programas iniciados por Bash que não foram deixados entrar em segundo plano de alguma forma.

Por fim, todos os processos são iniciados pelo kernel, geralmente através de algum wrapper ao redor da execve(2) chamada do sistema . Mas você não verá o kernel como um processo pai aqui; o kernel age em nome de algum processo do usuário, de modo que o processo é registrado como pai.

O motivo init(8) não é PID 1 é coberto em outra resposta aqui .

    
por 07.12.2014 / 00:26