Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/10/2014, 08:25
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pasar argumentos desde el proceso ps a otro

Holas,
Primero que nada, creo que el siguiente comando hace lo mismo que tu primer script:
Código BASH:
Ver original
  1. ps -e -o pid,ppid,state,comm
Segundo, permíteme simplificar tu código, en caso de que quieras seguir usándolo. El programa AWK que sigue hace lo mismo que tus 8 llamadas a AWK arriba:
Código BASH:
Ver original
  1. awk '
  2. BEGIN {
  3.        print "PID\tPPID\tESTADO\tCOMANDO";
  4.        pid="";
  5.        ppid="";
  6.        state="";
  7.        name="";
  8. }
  9. /^Pid/ { pid=$2 }
  10. /PPid/ { ppid=$2 }
  11. /State/ { state=$2 }
  12. /Name/ { name=$2 }
  13. END {
  14.        print pid "\t" ppid "\t" status "\t" name
  15. }'

Seguramente se puede escribir un programa que lea todos los archivos e imprima una línea por cada uno, pero al menos este lee un archivo e imprime el resumen en una sola llamada a AWK.

BASH soporta arrays, pero es necesario entender cómo funcionan, y no es la forma usual de lidiar con múltiples argumentos o con cadenas separadas por espacios. En general las soluciones con for o xargs son mucho más claras y se adaptan mejor a cómo funciona la shell.

Ya que no estás usando ps (si lo usaras, el comando que escribí arriba sería todo lo que necesitás), y que estás leyendo de /proc, considera usar algo como esto:
Código BASH:
Ver original
  1. for STATUS_FILE in /proc/*/status; do
  2.    # llamada a AWK
  3. done

Esto recorre todos los archivos cuyo nombre sea 'status' y que se encuentren en un directorio hijo (1 solo nivel) de /proc. Corres el riesgo de que exista un archivo que cumpla eso y no pertenezca a un proceso, pero por lo que sé no hay nada en /proc que cumpla esa regla y no sea el archivo de estado de un proceso. Para estar seguro, podrías cambiar el * arriba por [0-9]*, con lo cual en vez de aceptar cualquier nombre en el directorio hijo de /proc, solamente permites nombres que comiencen con un número.


Saludos.