Ouça a saída do processo dado pid $$

4

Digamos que eu tenha um pid em mãos, mypid=$$

existe algum comando bash / system que eu possa usar para ouvir a saída desse processo com o pid dado?

Se nenhum processo com mypid existir, acho que o comando deve simplesmente falhar.

    
por Alexander Mills 28.02.2018 / 08:38

2 respostas

4

Eu obtive o que precisava com essa resposta:

link

Acontece que usar wait <pid> só funcionará se esse pid for um processo filho do processo atual.

No entanto, os itens a seguir funcionarão para qualquer processo:

Para esperar por qualquer processo terminar

Linux:

tail --pid=$pid -f /dev/null

Darwin (requer que $pid tenha arquivos abertos):

lsof -p $pid +r 1 &>/dev/null

Com tempo limite (segundos)

Linux:

timeout $timeout tail --pid=$pid -f /dev/null

Darwin (requer que $pid tenha arquivos abertos):

lsof -p $pid +r 1m%s -t | grep -qm1 $(date -v+${timeout}S +%s 2>/dev/null || echo INF)
    
por 28.02.2018 / 09:31
2

Você pode usar o bash builtin wait :

$ sleep 10 &
[2] 28751
$ wait 28751
[2]-  Done                    sleep 10
$ help wait
wait: wait [-n] [id ...]
    Wait for job completion and return exit status.

    Waits for each process identified by an ID, which may be a process ID or a
    job specification, and reports its termination status.  If ID is not
    given, waits for all currently active child processes, and the return
    status is zero.  If ID is a a job specification, waits for all processes
    in that job's pipeline.

    If the -n option is supplied, waits for the next job to terminate and
    returns its exit status.

    Exit Status:
    Returns the status of the last ID; fails if ID is invalid or an invalid
    option is given.

Ele usa a chamada do sistema waitpid() ..

$ whatis waitpid
waitpid (2)          - wait for process to change state
    
por 28.02.2018 / 08:55