¿Cómo obtener la línea de comando del proceso UNIX?

8

¿Es posible tomar la línea de comando que se usó para invocar un proceso en Mac OS X?

usuario7656
fuente
1
ps --pid $PID -o args=Eso es lo que uso, de todos modos ...
yardena
2
El equivalente Mac de ese comando es:ps -p <pid> -o args=
Nate
1
si "-o args =" trunca la salida, puede intentarlops -p <pid> -o command=
Jose Alban

Respuestas:

11

ps axle muestra la línea de comando de todos los procesos en ejecución; puedes buscar el pid que quieras.

Bkkbrad
fuente
@ mark4o O simplemente ps awux | cat, ya que ps -w no limitará el número de columnas que se mostrarán cuando la salida no sea estándar, como cuando se canaliza a otro comando.
jtimberman
1
¿Por qué sucede esto cada semana? "Advertencia: sintaxis ps incorrecta, ¿quizás un falso '-'? Consulte procps.sf.net/faq.html " y "Tenga en cuenta que" ps -aux "es distinto de" ps aux ". Los estándares POSIX y UNIX requieren que" ps -aux "imprime todos los procesos propiedad de un usuario llamado" x ", así como imprime todos los procesos que serían seleccionados por la opción -a. Si el usuario llamado" x "no existe, esta ps puede interpretar el comando como "ps aux" en su lugar e imprime una advertencia. Este comportamiento está destinado a ayudar en la transición de scripts y hábitos antiguos. Es frágil, está sujeto a cambios y, por lo tanto, no se debe confiar en él ".
Hola71
No lo sé, hola71. Corregí mi respuesta de dos años por ti.
Bkkbrad
4

Hace:

~$ ps ax | grep "ntp"
   57   ??  Ss     0:04.66 /usr/sbin/ntpd -c /private/etc/ntp.conf -n
 3104 s000  S+     0:00.00 grep ntp

hacer lo que necesita (cambiar ntp al programa que le interesa)? Por lo general, esto me da los argumentos de la línea de comandos de los procesos en ejecución (por ejemplo, utilizo para verificar lo que Launchd usó al ejecutar un demonio del sistema).

El tentáculo
fuente
2

cat /proc/$PROCESSNUMBER/cmdline | tr '\0' '\n'

Aunque es específico de Linux, obtiene la línea de comandos del proceso numerada $PROCESSNUMBERdirectamente desde el núcleo (la /proc/$PROCESSNUMBER/cmdlineparte) y la hace legible colocando cada argumento en una línea separada traduciendo (con tr -tokenreemplazo) los \ 0 en líneas nuevas (\ n).

¡Esta línea solo funciona si coloca un número de proceso real de un proceso en ejecución (puede encontrar uno ejecutando el comando ps -ef) en la parte $ PROCESSNUMBER!

JdeHaan
fuente
3
El póster original pedía Mac OS X (que no tiene la caja procfs)
Andre Holzner
2
Oxargs -0 < /proc/PID/cmdline
Bash