Uno de los conceptos más importantes en los sistemas operativos es el proceso que se define como un programa en ejecución. Los programas son un conjunto de archivos que están almacenados en algún dispositivo de almacenamiento (disco duro, USB, etc.) y que por sí solos no tienen ningún funcionamiento, pero cuando ese conjunto de archivos se ejecutan entonces pasan a ser un proceso.

Procesos

El sistema operativo se encarga de: crear y destruir procesos, suspender y reanudar procesos, y sincronizar y comunicar procesos.

  • Información sobre procesos

Cmdlet

Alias

Parámetros y alias de los parámetros

WMI


Ejemplos

Obtener información básica sobre procesos

Obtener información ampliada sobre procesos

Obtener información sobre las propiedades de los procesos

Obtener información ordenada sobre las propiedades de los procesos

Obtener los 5 primeros procesos ordenados

Listar los procesos que tengan consumo alto de tiempo de CPU

Listar los nombres de procesos que se están ejecutando

Listar los procesos junto el fabricante

Información sobre la ruta de los procesos

Mostrar la descripción de los procesos que se están ejecutando

Obtener más información sobre los procesos (línea de comandos)

Obtener información sobre el comando ejecutado analizando procesos con una llamada WMI

Ver los programas que se están ejecutando desde que se arranca el sistema operativo

Mostrar información sobre un proceso indicando el nombre del proceso

Buscar procesos que no responden

Buscar un proceso que se está ejecutando

Módulos que se ejecutan en los procesos

Abrir Notepad y listar las dll que están cargadas cuando se ejecuta, ver la ruta dónde se ejecutan

Información sobre la ruta de los módulos de los procesos

Listar todas las propiedades de un proceso en concreto proceso utilizando WMI

Mostrar los procesos que ejecuta un usuario


Ejercicios

Contar el número de procesos que se están ejecutando en el sistema

Sacar las dll y realizar función hash

Sacar las dll y realizar función hash para el proceso Notepad

Ver los programas que se arrancan cuando un usuario inicia sesión.

Analizar procesos y guardar cada uno de los procesos en un fichero txt


  • Tabla de procesos

Cuando un proceso se ejecuta, el sistema operativo le asigna un espacio de direcciones y lo añade a una tabla de procesos. El espacio de direcciones de cada proceso contiene las instrucciones y datos del programa, además tiene una pila que lleva la cuenta de las llamadas a procedimientos.

Los procesos se dividen en partes. Estas partes son las que se llevan a la memoria dependiendo de la técnica de gestión que se utilice: paginación, segmentación, intercambio, memoria virtual, etc.

La tabla de procesos contiene información de cada uno de los procesos que se están ejecutando. El contenido de una entrada (hay una entrada por cada proceso) en la tabla de procesos puede ser el siguiente:

  • Identificador del proceso. Es un número que utiliza el sistema operativo para identificar los procesos de forma única, se conoce por la abreviatura PID (Process ID).
  • Información del estado del proceso. Preparado, en ejecución o bloqueado.
  • Prioridad. El sistema operativo puede asignar distinta importancia a cada proceso.
  • Dirección de la memoria. Zona de la memoria donde se ha cargado el proceso.
  • Directorio de trabajo. Directorio del usuario que ejecuta el programa.
  • Tiempo utilizado por el procesador. Tiempo que el proceso se ha estado ejecutando en el procesador.

Ejemplos

Listar la siguiente información sobre los procesos:

  • La cantidad de memoria no paginada que el proceso está utilizando, en kilobytes (NPM).
  • La cantidad de memoria paginable que el proceso está utilizando, en kilobytes (PM).
  • El tamaño del conjunto de trabajo del proceso, en kilobytes. El conjunto de trabajo se compone de las páginas de memoria que hace poco se hace referencia mediante el proceso (WS).
  • La cantidad de memoria virtual que el proceso está utilizando, en megabytes. La memoria virtual incluye el almacenamiento de los archivos de paginación en el disco (VM).
  • La cantidad de tiempo de procesador que el proceso se ha utilizado en todos los procesadores, en cuestión de segundos (CPU).

Listar los procesos que tengan consumo alto de tiempo de CPU

Mostrar el tiempo transcurrido en la ejecución de un proceso

Mostrar información sobre un proceso indicando el ID del proceso

Mostrar los identificadores de los procesos junto con sus identificadores padres


Ejercicio

Mostrar los procesos cuya zona de memoria para trabajar es mayor que 100 MB


  • Estados de un proceso

Los procesos cuando se ejecutan pueden atravesar distintos estados desde que se inician hasta que finalizan. Cuando un proceso se inicia, primero se mete en una cola de trabajos; cuando es admitido por el sistema, pasa a una cola de procesos que están preparados y esperando para ejecutarse; cuando el procesador asigna tiempo de ejecución, el proceso pasa de estar preparado a ejecución, y cuando el proceso necesita alguna señal o dato, pasa al estado bloqueado (se lo introduce en la cola de bloqueados).

  • Crear procesos

Los procesos se pueden crear de varias formas:

  • Cuando se arranca el sistema operativo, éste ejecuta procesos necesarios para llevar a cabo distintas funciones.
  • Por petición de un usuario del sistema, escribiendo un comando en una línea de comandos o pulsando encima de algún icono.
  • Cuando un proceso hace una llamada al sistema para crear un nuevo proceso (para crear un proceso en Windows se utiliza función «CreateProcess()», en Linux se utiliza la llamada «fork()»).

En PowerShell se pueden arrancar procesos de las siguientes formas:

  • Iniciar un proceso con un cmdlet

Cmdlet

Alias

Parámetros y alias de los parámetros


Ejemplo

Iniciar el programa Notepad


  • Invocar un cmdlet

Cmdlet


Ejemplo

Invocar el cmdlet Get-Process


  • Crear un bloque e invocarlo

Cmdlet


Ejemplo

Invocar la ejecución del programa Ping


  • Iniciar una instancia de una aplicación mediante WMI

WMI


Ejemplo

Arrancar notepad iniciando una instancia mediante WMI


  • Parar procesos

Igual que existen formas de crear procesos, también existen varias formas de acabar con los procesos:

  • El proceso acaba de ejecutarse de forma normal.
  • El proceso ha sufrido un error.
  • Por petición de un usuario del sistema, escribiendo un comando en una línea de comandos o pulsando encima de algún icono.
  • Cuando un proceso hace una llamada al sistema para acabar con un proceso (para terminar con un proceso en Windows se utiliza la función «ExitProcess()» y en Linux la llamada «kill()»).

Hay varias formas de parar un proceso en PowerShell:

  • Parar un proceso con un cmdlet

Cmdlet

Alias

Parámetros y alias de los parámetros


Ejemplo

Parar un proceso


  • Parar un proceso mediante una invocación a un método WMI

Cmdlet


Ejemplo

Parar el proceso Notepad mediante una invocación a un método WMI


  • Parar un proceso mediante el método Kill

Método para parar procesos


Ejemplo

Parar el proceso Notepad mediante el método Kill


Ejercicio

Parar procesos de forma gráfica


  • El procesador

Los procesos se pueden ejecutar casi concurrentemente (ejecución simultánea de varios procesos) por el procesador, incluso cuando sólo se dispone de un procesador, dando la sensación de casi paralelismo, aunque el verdadero paralelismo sólo se da con múltiples procesadores o con procesadores con varios núcleos (cada núcleo puede ejecutar un proceso), con un solo procesador se cambia tan rápido de un proceso a otro que nos da esa sensación de paralelismo, esto se denomina multiprogramación.

Cualquier proceso que se está ejecutando puede suspender por la ocurrencia de un evento determinado, por ejemplo, que otro proceso se tenga que ejecutar, una interrupción, etc.

Cuando un proceso tiene que parar y dejar pasar a otro se produce un cambio de contexto, se guarda el contexto del proceso que se estaba ejecutando y se ejecuta el contexto del nuevo proceso. El contexto de un proceso contiene información para que el sistema operativo pueda gestionar el proceso.

Cmdlets con llamadas WMI

Utilización de CPU

Información detallada de procesos en el procesador

Carga del procesador


Ejemplo

Ver la carga del procesador


  • Hilos

Un proceso tiene miniprocesos que se llaman hilos, la razón de dividir un proceso en unidades más pequeñas es que la mayoría de los procesos están realizando varias acciones a la vez (leer del disco, esperar un clic del ratón, etc.) y puede ser que alguna de esas acciones se bloquee y deje bloqueado al proceso completo.

Utilizando los hilos, el bloqueo sólo se produce en una parte y no todo el proceso, esto quiere decir que otros hilos se pueden seguir ejecutando sin problema.

Algunas características de los hilos:

  • Los procesos crean hilos.
  • Los hilos tienen prioridad.
  • Se pueden ver los hilos que se ejecutan.
  • Se pueden ver las prioridades de los hilos.
  • Se pueden relacionar hilos con procesos y servicios.

Listado de hilos que se están ejecutando

WMI


Ejemplos

Proceso que crea un hilo

Mostrar la prioridad de los hilos de los procesos

Conocer el estado de los hilos de los procesos


Ejercicios

Mostrar los hilos que se están ejecutando en relación con los servicios y los procesos


  • Comunicación entre procesos

En ocasiones los procesos tienen que comunicarse unos con otros pasándose información, la forma de comunicarse entre procesos se puede realizar mediante, por ejemplo, zonas de memoria compartida.

Existen algunas situaciones que el sistema operativo debe controlar para que la comunicación entre procesos sea correcta. Una de ellas es asegurar que si un proceso utiliza una zona o archivo compartido, no deje a otros procesos utilizar esos recursos a la vez, es decir, excluir del acceso a otros, esto se conoce como exclusión mutua. La solución es controlar el acceso a la región crítica, que se puede definir como la parte de un programa en la cual se accede a un recurso compartido y donde no debe haber más de un proceso accediendo simultáneamente. Habrá, por tanto, que ordenar y controlar el acceso que hacen los programas a esa región critica, no puede haber dos procesos simultáneamente en sus regiones críticas», entonces si un programa entra en la sección crítica, no permitirá el acceso a otro programa.

  • Segundo plano

Los procesos que se ejecutan pueden estar en primer plano o segundo plano: los de primer plano interactúan con los usuarios, y los de segundo plano o demonios realizan una función específica sin tener que actuar con el usuario (aunque podrían hacerlo).

En PowerShell se pueden crear trabajos y actúan en segundo plano.

Cmdlet

Alias

Parámetros y alias de los parámetros


Ejemplos

Iniciar un trabajo en segundo plano con PowerShell

Iniciar un script en segundo plano con PowerShell

Iniciar cinco trabajos en segundo plano con PowerShell


  • Servicios

Los procesos en segundo plano que realizan distintas funciones, algunas relacionadas con el sistema operativo y otras no, se denominan servicios, y se están ejecutando permanentemente en el sistema.

Los servicios se pueden iniciar, detener, pausar, reanudar, etc. Estas acciones, normalmente, sólo las puede realizar el administrador de forma local o remota. Un ejemplo de servicio de sistema es el servicio de escritorio remoto, que permite conectarse remotamente al equipo.

Los servicios ejecutan procesos y los procesos tienen hilos, hay relación entre procesos e hilos y entre servicios e hilos.

Listar todos los servicios

Cmdlet

Alias

Parámetros y alias de los parámetros

WMI


Ejemplos

Ver servicios que están “Running”


Ejercicios

Ver los servicios que dependen de otros servicios

Mostrar los procesos que se están ejecutando en relación con los servicios

Mostrar los procesos que se están ejecutando en relación con los servicios (solo llamadas WMI)

Mostrar los procesos que se están ejecutando en relación con los servicios (solo llamadas WMI y más información)

Mostrar los servicios que se están ejecutando en relación con los procesos y los hilos

Mostrar los hilos que se están ejecutando en relación con los servicios y los procesos

Mostrar información avanzada de los procesos (Path, ExecutablePath, CommandLine) que se están ejecutando en relación con los servicios