ps -o args= -p "$pid"
Le indicará la lista de argumentos dada al último comando que ejecutó el proceso (o si no ejecutó ninguno, el que ejecutó su padre ...) siempre que el proceso no anule su lista de argumentos después.
ps
mostrará esa lista arg concatenada con espacios y hasta un límite que puede aumentar con algunas ps
implementaciones agregando un par de -w
opciones). En Linux, puede ver el arglista separado por bytes NUL en /proc/$pid/cmdline
.
lsof +fg -ap "$pid" -d 0-2
Le dirá a qué apuntan los descriptores de archivos stdin, stdout y stderr del proceso y el modo en que se abrieron (como W,AP
para solo escritura con agregar como si >>
se usara una redirección en un shell POSIX).
lsof
para detectar que el proceso se está redirigiendo amyapp.log
readlink /proc/$pid/fd/1
Puede usar el
ps
comando y especificar el pid para examinar con el-p
modificador, utilizando el-f
modificador para obtener una lista completa o-l
una lista larga más detallada.Como ejemplo de salida:
Sin embargo, esto genera una línea de encabezado, que quizás no desee en su archivo de registro. Puede recortar esto usando la
-h
opción, si su pid fue 1234:Tenga en cuenta que he redirigido la salida usando
>>
para agregar a su archivo de registro.fuente
tail -n+1
(requiere GNU, pero Q era Linux / Ubuntu). O evite el problema conps -h{f,l}p 1234
(también GNU).tail -n1
definitivamente funciona en Ubuntu, ¿por qué es+
necesario?tail -n+2
qué muestra todas las líneas excepto la primera.tail -n1
muestra solo la última línea. Compare:seq 1 10 | tail -n+2
y así sucesivamente.-h
ya que evita una tubería innecesaria y un proceso adicional.Utilizando
ps -f
puede verificar la lista de argumentos y también puede redirigirla a cualquier archivo.Entonces, en este caso solo use
ps -ef | grep 1234 > myapp.log
Por favor, consulte esta página de manual de ps .
fuente
ps -ef | grep 'foo' | grep -v grep
grep -v
, uso este truco:grep '123[4]'