Por que existem três processos em execução para um script?

1

Eu tenho a seguinte linha no crontab.

@reboot /usr/bin/teamspeak3-server_linux-amd64/ts3server_minimal_runscript.sh

Quando eu reinicio, o script é executado (ou seja, meu servidor Teamspeak 3 é iniciado) em segundo plano, mas eu estava tentando descobrir como eu poderia pará-lo (não posso simplesmente ctrl + c no terminal, pois ele está sendo executado agora o fundo). Uma postagem do fórum dizia para matar o processo usando o comando abaixo.

ps -ef | grep -i XXXX:  to find your background running process

kill OID : kill your unnecessary process

Por OID, presumi que ele quisesse dizer PID. No entanto, quando tentei aplicar isso ao meu cenário, encontrei três processos em execução, conforme mostrado abaixo.

$ps -ef | grep ts3
server     889    586  0  22:33  ?       00:00:00 /bin/sh -c /usr/bin/teamspeak3-server_linux-amd64/ts3server_minimal_runscript.sh
server     890    889  0  22:33  ?       00:00:00 /usr/bin/teamspeak3-server_linux-amd64/ts3server_minimal_runscript.sh
server     903    890  0  22:33  ?       00:00:00 ./ts3server_linux_amd64

Estou confuso. Por que existem três processos em execução? Eu estava esperando apenas para ver um script em execução (ou seja, imaginei que apenas a linha do meio estaria lá). Eu poderia matar todos os três e eu acho que isso iria parar o meu script, mas eu quero entender por que existem três processos aqui e não um?

    
por john smith 29.06.2015 / 00:53

2 respostas

1

O primeiro processo é o shell executando seu script.

O segundo processo é um subprocesso do shell desse script, possivelmente devido a comandos sendo executados entre parênteses, o que faz com que o processo seja interrompido. Um exemplo é: "(date; cat)".

O terceiro processo é o binário do servidor real que você deseja executar.

Se você quiser matar o servidor, mate o terceiro processo. Isso pode fazer com que o subprocesso saia e, em seguida, o script de shell principal seja encerrado. No entanto, o subprocesso pode ser um loop de shell, aguardando que o servidor morra e, em seguida, reinicie-o. Então você pode ter que matar o segundo e o terceiro processo para impedir que ele reapareça.

A maioria dos programas projetados para rodar em segundo plano tem melhores maneiras de matá-los. Por exemplo, os daemons iniciados em /etc/init.d geralmente podem ser controlados chamando o script com argumentos "start", "stop", "restart", etc. Seu servidor pode ter um sistema semelhante.

    
por 29.06.2015 / 03:27
0

Há três processos em execução porque você está executando um script e esse script tem comandos escritos nele que executam outros aplicativos:

  1. Bash (para executar o script)
  2. O script em si.
  3. O app .

Dentro do script:

root@onare:/home/onare# cat Downloads/TeamSpeak3-Client-linux_amd64/ts3client_runscript.sh 
#!/bin/bash

export KDEDIRS=
export KDEDIR=
export QTDIR=.
export QT_PLUGIN_PATH=.
export LD_LIBRARY_PATH=".:$LD_LIBRARY_PATH"

D1=$(readlink -f "$0")
D2=$(dirname "${D1}")
cd "${D2}"

if [ -e ts3client_linux_x86 ]; then
    ./ts3client_linux_x86 $@
else
    ./ts3client_linux_amd64 $@
fi

Se você quiser conhecer todo o processo em execução com o grep, há um comando que você pode usar:

pgrep ts3 promete todos os PIDs correspondentes a *ts3*

Em seguida, execute:

kill -9 $(pgrep ts3)

Isso matará todos os PIDs com ts3 em execução.

SS:

    
por 29.06.2015 / 03:11

Tags