Como definir um identificador para vários processos em segundo plano?

2

Estou criando um servidor de jogos personalizado e tenho um arquivo .jar para executá-lo. Eu preciso lançar vários servidores de jogo em uma única máquina virtual (como 15). Eu descobri que eu poderia simplesmente executá-los assim:

java -jar server-1.0.jar &

mas quando digito ps , vejo apenas PID , CMD , TTY e TIME . Como eu poderia identificar qual é o servidor 6, qual é o servidor 9 e etc.? O que devo usar?

    
por Gintas_ 06.01.2016 / 13:36

2 respostas

1

Use, por exemplo, a opção -f para que ps exiba mais informações. Veja man ps :

-f does full-format listing. This option can be combined with many other UNIX-style options to add additional columns. It also causes the command arguments to be printed. When used with -L, the NLWP (number of threads) and LWP (thread ID) columns will be added. See the c option, the format keyword args, and the format keyword comm.

    
por 06.01.2016 / 13:41
5

Você pode anotar o pid de um trabalho em segundo plano logo após o lançamento:

command & pid1=$!
command & pid2=$!

$! é o pid do último trabalho em segundo plano iniciado.

Usando ferramentas que pesquisam um pid pelos atributos do processo em um script ou programa é mal aconselhado.

Um processo deve sempre acompanhar seus filhos. Se você descer a rota ps / pgrep ..., corre o risco de matar (= sinalizar) vítimas inocentes (= processos que não são seus, mas que acidentalmente correspondem à sua consulta).

Você também corre esse risco se tiver como alvo os pids certos, mas esses pids não são seus filhos. Um espaço pid é reservado até o processo morrer e seu pai wait s (somente o pai pode wait em um processo). Se um pid não é seu, ele pode ter morrido e ter sido aguardado entre o momento em que você aprende o pid e a hora em que você o sinaliza. Então você pode estar mirando em uma vítima inocente (uma condição de corrida).

    
por 06.01.2016 / 13:47