Actividad 11: Procesos

per Victor Carceler darrera modificació 2020-03-25T15:28:55+01:00

Inicie una máquina virtual y realice las siguientes actividades.

  1. Utilice el comando ps (lea su página de manual)
  • Sin argumentos. ¿Qué procesos muestra? ¿Qué caracteristicas muestra de cada proceso?
  • ¿Qué diferencias encuentra entre ps -ef, ps fax y ps faxl?
  • Averigüe qué proceso tiene el PID más bajo.
  • ¿Qué PID tiene el proceso Bash que le atiende? Siga la linea genealógica del proceso hasta llegar al origen.
  • Compruebe que el kernel Linux expone información sobre los procesos del sistema en el sistema de archivos virtual /proc. Documentación: Kernel/proc, Wikipedia: /proc, CentOS: /proc, man proc.
    • Compruebe que por cada proceso, en /proc existe un directorio que tiene por nombre el PID del proceso. ¿A qué usuario y grupo pertenece dicho directorio?
    • Entre en el subdirectorio correspondiente al shell Bash que le está atendiendo y obtenga un listado detallado. ¿Qué contiene el subdirectorio fd? ¿Qué contiene el fichero maps? ¿Qué contiene el fichero status?
    • Si está trabajando en una máquina virtual sin escritorio, realice este punto en la máquina física. Cargue mozilla-firefox y abra tres pestañas en el navegador visistando diferentes webs. Busque el PID del proceso mozilla-firefox. Vaya al directorio correspondiente de /proc y examine el fichero status. ¿Cuantas hebras tiene el proceso?
  • El programa top es un monitor del sistema que muestra información sobre el estado del sistema. Esta información se actualiza periodicamente.
    • Consulte la página de manual de top.
    • Ejecute top, con la ayuda del manual asegúrese de que entiende el significado de cada uno de los campos que aparecen.
    • Si mientras se ejecuta top pulsa F puede seleccionar el campo por el que se ordenará el listado. ¿Qué proceso tiene el área residente más grande? ¿Qué proceso ocupa más espacio de intercambio? ¿Qué proceso tiene un tamaño virtual mayor? ¿Qué proceso ha provocado más fallos de página?
    • Compruebe que top le permite cambiar el nice de un proceso (tecla r) y enviar la señal de terminal (tecla k).
    • Tambien puede utilizar top de manera no interactiva. Pruebe top -b -n 1
    • Otros monitores del sistema son: atop y htop. Instálelos y pruébelos.
  • Los comandos uptime y vmstat también muestran información sobre la actividad del sistema. Consulte su página de manual. Ejecute: uptime, ejecute: vmstat 1.  La columna cs le indica el número de cambios de contexto que ocurren.
  • Para las siguientes actividades necesitamos tener procesos de prueba. Por eso compilaremos el programa C consumecpu.c, que no hace mas que dar trabajo a la CPU:
    /*
    ** Este programa consume tiempo de CPU de manera indefinida
    */
    int main() {
    int a;

    while(1) {
    a++;
    a--;
    }

    return 0;
    }
  • Ejecute en un terminal consumecpu. El terminal quedará ocupado por la ejecución del programa. Puede detenerlo, sin terminarlo, pulsando CTRL-Z. En ese momento el proceso se detiene y el terminal queda libre. Si utiliza el comando jobs verá la lista de tareas del shell. Puede ejecutar la tarea en segundo plano ejecutando bg (o bg %<id>).
  • Una vez que tenga la tarea ejecutándose en segundo plano puede comprobar con top que la CPU le dedica atención.
  • Puede traer a primer plano una tarea con el comando fg. Si la tiene en primer plano la puede terminar con CTRL-C. También se pueden lanzar directamente en segundo plano utilizando el &.
  • Compruebe que todos los procesos lanzados por un shell tienen por padre al shell. Cuando el shell termina también terminan todos sus hijos.
  • Compruebe que con 'nohup consumecpu &' puede lanzar el proceso en segundo plano, y de manera que no le afecte la muerte del padre. Así, cuando termine el shell que lo lanzó, el proceso sigue su ejecución. Como el proceso se desconecta del terminal, normalmente debe redirigirse su salida (y tal vez su entrada) a un fichero. Qué PPID tiene el proceso una vez que su padre termina ?
  • Puede terminar un proceso con el comando kill (o todos los del mismo nombre con killall). Cualquiera de los dos comandos se utilizan para enviar señales a procesos, por defecto se envía la señal SIGTERM, que solicita de forma elegante el fin del proceso. Si el proceso no quiere terminar se puede utilizar la señal de muerte SIGKILL que el proceso no puede eludir. Lance varios procesos consumecpu y terminelos utilizando kill y killall.