ps -o args= -p "$pid"
Dirá a você 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 substitua sua lista de argumentos posteriormente.
ps
mostrará que a lista arg concatenou com espaços e até um limite que você pode aumentar com algumas ps
implementações adicionando algumas -w
opções). No Linux, você pode ver o arglist separado por NUL bytes em /proc/$pid/cmdline
.
lsof +fg -ap "$pid" -d 0-2
Dirá a você o que os descritores de arquivo stdin, stdout e stderr do processo apontam e o modo como eles foram abertos (como W,AP
somente para gravação com acréscimo, como se um >>
redirecionamento fosse usado em um shell POSIX).
lsof
para detectar que o processo está a redireccionar paramyapp.log
readlink /proc/$pid/fd/1
Você pode usar o
ps
comando e especificar o pid para examinar com a-p
opção, usando a-f
opção para fornecer uma lista completa ou-l
uma lista longa mais detalhada.Como um exemplo para a saída:
No entanto, isso gera uma linha de cabeçalho, que você pode não querer no seu arquivo de log. Você pode apará-lo usando a
-h
opção, se seu pid for 1234:Observe que redirecionei a saída usando
>>
para anexar ao seu arquivo de log.fonte
tail -n+1
(requer GNU, mas Q era Linux / Ubuntu). Ou evite o problema comps -h{f,l}p 1234
(também GNU).tail -n1
definitivamente funciona no Ubuntu, por que é+
necessário?tail -n+2
que mostra todas as linhas, exceto a primeira.tail -n1
mostra apenas a última linha. Compare:seq 1 10 | tail -n+2
e assim por diante.-h
, pois evita um tubo desnecessário e um processo extra.Usando
ps -f
você pode verificar a lista de argumentos e também pode redirecioná-la para qualquer arquivo.Então, neste caso, basta usar
ps -ef | grep 1234 > myapp.log
Por favor, verifique esta página de manual do ps .
fonte
ps -ef | grep 'foo' | grep -v grep
grep -v
uso que este truque:grep '123[4]'