Determina se o processo foi iniciado diretamente de uma janela de terminal ou programaticamente como um processo filho

0

Se um usuário executa um processo a partir de um terminal, é possível dizer? Comparado a se o processo foi lançado a partir de um programa, onde esse programa foi lançado de um terminal.

O caso de uso é, se for executado pelo terminal, será assim:

suman:
suman:
suman:

mas se for executado por outro programa x, poderá ter esta aparência, se x acrescentar algo a stdout / stderr:

x: suman:
x: suman:

mas eu quero detectar isso, então parece:

x:
x:    
x:
    
por Alexander Mills 16.07.2018 / 07:37

1 resposta

3

Você pode ver qual é o ID do processo pai (PPID) do processo em questão e usar o PPID para determinar se ele foi executado a partir de um shell ou de um programa diferente.

Por exemplo, se eu quisesse ver o que estava executando esse processo sleep , posso procurar por ele. PPID.

$ ps -ef | grep "sleep"
user       2470  1996  0 06:30 pts/1    00:00:00 sleep 60

PID 1996 é o PPID do processo sleep . Vamos grep para isso agora.

$ ps -ef | grep 1996
user       1996  1995  0 05:57 pts/1    00:00:00 bash

O PID 1996 é um shell bash , o que é uma boa indicação de que o sleep process poderia ser executado a partir de um terminal. Para levá-lo ainda mais longe, você pode grep para o PPID do processo bash .

$ ps -ef | grep 1995
user       1995   448  0 05:57 tty1     00:00:00 /usr/bin/urxvt

O PPID do processo bash é urxvt , um terminal virtual. Portanto, o comando sleep está sendo executado de um terminal.

    
por 16.07.2018 / 08:37

Tags