¿Cómo puedo obtener los argumentos del comando o la línea de comando completa de un proceso en ejecución usando su nombre de proceso?
Por ejemplo este proceso:
# ps
PID USER TIME COMMAND
1452 root 0:00 /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pid
Y lo que quiero es /sbin/udhcpc -b -T 1 -A 12 -i eth0 -p /var/run/udhcpc.eth0.pido los argumentos. Sé el nombre del proceso y quiero sus argumentos. Estoy usando Busybox en SliTaz.

ps(no recomendado) o está buscando algún comando alternativo parapsobtener el resultado? ¿Qué hay que hacer cuando sepsobtienen múltiples líneas de salida? imprimir todo / primero / último?argcomocommandsegún la respuesta de @John ?pidof <process name>ps -o pid, args | grep $ PID | tr -s "" | cut -d "" -f 2 Pero de esta manera no obtengo los args en una variableRespuestas:
Puede usar el
-ointerruptor para especificar su formato de salida:Desde la página del manual :
También puede usar el
-pinterruptor para seleccionar un PID específico:pidoftambién se puede usar para cambiar de nombre de proceso a PID, permitiendo el uso de-pcon un nombre:Por supuesto, también puede usar
grepesto (en cuyo caso, debe agregar el-einterruptor):GNU ps también le permitirá eliminar los encabezados (por supuesto, esto es innecesario cuando se usa
grep):En otros sistemas, puede canalizar a AWK o sed:
Editar: si desea capturar esta línea en una variable, simplemente use
$(...)como de costumbre:o con
grep:fuente
argsconcommand(ocmd).cmdycommandson aliasargs, esto probablemente sea innecesario.greppara coger la línea que realmente está interesado en:ps -eo args | grep dhcpcd | head -n -1. Edité mi respuesta.Intenta algo como esto:
(ejemplo de salida de busybox en OpenWrt en uno de mis enrutadores)
/proc/$PID/cmdlinecontiene los argumentos del proceso$PIDcomo una cadena C-ish una tras otra. Cada cadena tiene terminación cero.Las citas sobre algunos argumentos u opciones son cosas de shell. Debe mirar más de cerca las líneas que se muestran y dónde se utilizan espacios u otros caracteres con un significado especial para el shell. Deberá citar ese carácter (s) de alguna manera o el argumento completo al volver a unir estas líneas a una línea de comando.
fuente
tr "\0" " " </proc/991/cmdline\0con `` ser malo, pero creotr '\0' '\n' < /proc/$foo/cmdlineque es un poco más simple quexargs.printfhace que sea más fácil agregar comillas a la salida, insertar un espacio en lugar de la nueva línea, etc. Cuando se piensa en agregar más procesamiento, el caminoprintfes un buen comienzo.Método # 1 - Usando ps
Podrías usar
ps -eaf | grep 1234.Ejemplo
NOTA: Busybox
psno incluye los-eafinterruptores como se muestra arriba de un típicopsque se incluye con la mayoría de Linux, sin embargo, Busyboxpsmuestra lo que parece ser una salida muy similar al ejemplo que proporcioné. Puede instalar Busybox en la mayoría de Linux y ejecutarlo así:Método # 2 - Usando / proc
También puede mirar el
cmdlinearchivo que tiene cada PID/proc/<pid>.Pero tenga en cuenta que le falta el espacio. Esto se debe a que se usa un carácter NUL dentro de este archivo para separar los argumentos de la línea de comandos. Sin embargo, no se preocupe, estos pueden eliminarse.
Referencias
fuente
Conociendo el PID, solo ejecutivo
Por ejemplo, para PID = 127
fuente