O PID da tarefa em segundo plano é diferente do PID da tarefa listada usando ps

1

Observação: eu movi isso para o estouro de pilha, acho que é o lugar certo: aqui

Eu tenho um problema estranho, não consigo entender bem. O que eu faço é executar uma função chamada fn_rundumper que basicamente apenas chama o código bash: 'pterm -z "cmd.sh" param1 &'

Aqui está a saída disso, que inclui o pid de fundo "27938858":

fn_rundumper
running fn_dumper...
[1] 27938858
fn_dumper...done

Então eu olho para os números de trabalho que estão rodando isso também mostra PID "27938858":

jobs -l
[1] + 27938858 Running              $(pterm -z "$SCRIPTS_DIR/run_dumper.sh" $VO

Então eu faço um comando ps para ver o que pterms estão executando:

ps | grep pterm
 24285189 ?        00:00:00 pterm
 27938859 ?        00:00:00 pterm

Isso produz o PID "27938859". Isso é diferente dos outros!

Quando eu mato PID 27938858, nada parece acontecer. Quando eu mato o PID 27938859, o fundo pterm é fechado.

O problema é que eu posso querer executar muitos pterms de plano de fundo diferentes, bem como alguns pterms que não são abertos como tarefas em segundo plano (por exemplo, executar separadamente). Então, quando eu vou arrumar, eu só quero fechar os arquivos que eu abri através do meu script.

Eu estava tentando usar trabalhos -l para ver os PIDs que eu preciso fechar, mas como acabei de descrever, este é o PID errado.

Alguém pode explicar por que isso acontece? e também o que preciso fazer para obter o PID correto? Obrigado!

- editar - O melhor que posso pensar é fazer um 'ps | grep pterm 'antes e depois e compare os resultados para encontrar o novo pterm PID ... do-able, mas feio: (

    
por code_fodder 02.02.2015 / 11:03

1 resposta

2

O que está acontecendo é que você está criando dois processos, o primeiro é o da sua função fn_rundumper e o segundo é o pterm aberto pela sua função. É assim que sua chamada de função recebe um pid terminando com 858, e pterm da sua função pega o pid depois dele, terminando com 859.

Quanto ao pid do primeiro pterm , é o do terminal que você usou para executar sua função. É por isso que matá-lo matará tudo que for criado nele (contanto que você não esteja usando o comando nohup ).

Para ver o mesmo pid em um comando ps , tente: ps | grep run_dumper.sh , que é o pid do script bash que executa sua função fn_rundumper .

    
por 02.02.2015 / 11:24