Comando com o qual um processo foi executado

8

Suponha que eu executei o processo com o seguinte comando:

myapp -e -c -f myapp.config > /var/log/myapp/myapp.log 2>&1

Depois de um tempo, tenho apenas pid de myapp process, por ex. 1234. Existe uma maneira de obter o comando com todos os sinalizadores e redirecionar a saída para myapp.log de alguma forma apenas por pid ?

    
por user3663882 28.09.2016 / 11:13

3 respostas

10

ps -o args= -p "$pid"

Irá dizer-lhe a lista de argumentos dada ao último comando que o processo executou (ou se não executou nenhum, aquele que seu pai executou ...) desde que o processo não tenha sobrescrito sua lista de argumentos posteriormente.

ps mostrará essa lista de argumentos concatenada com espaços e até um limite que você poderá aumentar com algumas implementações ps adicionando algumas opções -w ). No Linux, você pode ver o arglist separado por bytes NUL em /proc/$pid/cmdline .

lsof +fg -ap "$pid" -d 0-2

Indica para que ponto os descritores de processo stdin, stdout e stderr apontam e o modo em que foram abertos (como W,AP para somente gravação com acréscimo como se um redirecionamento >> fosse usado em um shell POSIX ).

    
por 28.09.2016 / 12:42
4

Você pode usar o comando ps e especificar o pid para examinar com a opção -p , usando a opção -f para fornecer uma listagem completa ou -l para uma listagem longa mais detalhada.

Como exemplo de saída:

$ sleep 60 &
[1] 31441
$ ps -lp 31441
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
0 S     0 31441 31319  0  80   0 -  1423 hrtime pts/3    00:00:00 sleep
$ ps -fp 31441
UID        PID  PPID  C STIME TTY          TIME CMD
root     31441 31319  0 10:44 pts/3    00:00:00 sleep 60

Isso, no entanto, gera uma linha de cabeçalho, que você pode não querer em seu arquivo de log. Você pode cortar isso usando a opção -h , se o seu pid era 1234:

ps -lhp 1234 >> /var/log/myapp/myapp.log 2>&1

Note que redirecionei a saída usando >> para anexar ao seu arquivo de log.

    
por 28.09.2016 / 11:41
1

Usando ps -f , você pode verificar a lista de argumentos e também redirecioná-la para qualquer arquivo.

Então, neste caso, use apenas ps -ef | grep 1234 > myapp.log

Por favor, verifique esta página de manual ps .

    
por 28.09.2016 / 11:20