Contenidos
- ¿Más ejercicios sobre gestión de procesos en PowerShell?
- Introducción
- Procesos
- Información sobre procesos
- 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
- Ejemplos
- Tabla de procesos
- Estados de un proceso
- Crear procesos
- Parar procesos
- El procesador
- Hilos
- Comunicación entre procesos
- Segundo plano
- Servicios
- Información sobre procesos
- ¿Más ejercicios sobre procesos?
¿Más ejercicios sobre gestión de procesos en PowerShell?
Introducción
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.
Los procesos son programas en ejecución, un proceso puede pasar por varios estados desde que se crea hasta que muere, los procesos que se ejecutan en 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).
Los procesos en segundo plano y que realizan distintas funciones, algunas relacionadas con el sistema operativo y otras no, se denominan servicios, los servicios se están ejecutando permanentemente en el sistema.
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
1 | Get-Process |
Alias
1 2 | ps gps |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Name {ProcessName} Id {PID} InputObject {} IncludeUserName {} ComputerName {Cn} Module {} FileVersionInfo {FV, FVI} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} |
WMI
1 | Get-WmiObject -Class win32_process |
Ejemplos
Obtener información básica sobre procesos
1 | Get-Process |
Obtener información ampliada sobre procesos
1 2 3 | Get-Process | Select-Object * gps | Select-Object * ps | Select-Object * |
Obtener información sobre las propiedades de los procesos
1 2 3 | Get-Process | Select-Object Name, Id, Company gps | Select-Object Name, Id, Company ps | Select-Object Name, Id, Company |
Obtener información ordenada sobre las propiedades de los procesos
1 2 3 | Get-Process | Select-Object Name, Id, Company | Sort-Object Name gps | Select-Object Name, Id, Company | Sort-Object Name ps | Select-Object Name, Id, Company | Sort-Object Name |
Obtener los 5 primeros procesos ordenados
1 2 3 | Get-Process | Select-Object Name, Id, Company | Sort-Object Name | Select-Object -First 5 gps | Select-Object Name, Id, Company | Sort-Object Name | Select-Object -First 5 ps | Select-Object Name, Id, Company | Sort-Object Name | Select-Object -First 5 |
Listar los procesos que tengan consumo alto de tiempo de CPU
1 | Get-Process | select cpu,id,name | sort cpu -Descending |
Listar los nombres de procesos que se están ejecutando
1 | ps | select Name |
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).
1 | Get-Process | Select-Object NPM,PM,WS,VM,CPU |
Listar los procesos que tengan consumo alto de tiempo de CPU
1 | Get-Process | select cpu,id,name | sort cpu -Descending |
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
1 | Start-Process |
Alias
1 2 | saps start |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | FilePath {PSPath} ArgumentList {Args} Credential {RunAs} WorkingDirectory {} LoadUserProfile {Lup} NoNewWindow {nnw} PassThru {} RedirectStandardError {RSE} RedirectStandardInput {RSI} RedirectStandardOutput {RSO} Verb {} WindowStyle {} Wait {} UseNewEnvironment {} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} |
Ejemplo
Iniciar el programa Notepad
1 | Start-Process notepad |
- Invocar un cmdlet
Cmdlet
1 | Invoke-Expression |
Ejemplo
Invocar el cmdlet Get-Process
1 2 | $str = "Get-Process" Invoke-Expression $str |
- Crear un bloque e invocarlo
Cmdlet
1 | Invoke-Command |
Ejemplo
Invocar la ejecución del programa Ping
1 2 | $scriptblock = {ping host3} Invoke-Command -scriptblock $scriptblock |
- Iniciar una instancia de una aplicación mediante WMI
WMI
1 2 | ([Wmiclass]'Win32_Process').GetMethodParameters('Create') Invoke-WmiMethod -Path win32_process -Name create -ArgumentList notepad.exe |
Ejemplo
Arrancar notepad iniciando una instancia mediante WMI
1 2 | ([Wmiclass]'Win32_Process').GetMethodParameters('Create') Invoke-WmiMethod -Path win32_process -Name create -ArgumentList notepad.exe |
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
1 | Stop-Process |
Alias
1 2 | spps kill |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | Name {ProcessName} Id {} InputObject {} PassThru {} Force {} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} WhatIf {wi} Confirm {cf} |
Ejemplo
Parar un proceso
1 | Get-Process -Name notepad | Stop-Process |
- Parar un proceso mediante una invocación a un método WMI
Cmdlet
1 | Invoke-WmiMethod |
Ejemplo
Parar el proceso Notepad mediante una invocación a un método WMI
1 | Get-WmiObject -Class Win32_Process -Filter "name='notepad.exe'" | Invoke-WmiMethod -Name Terminate |
- Parar un proceso mediante el método Kill
Método para parar procesos
1 | .Kill() |
Ejemplo
Parar el proceso Notepad mediante el método Kill
1 | Get-Process -Name notepad | ForEach-Object -Process {$_.Kill()} |
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
1 | Get-WmiObject Win32_PerfFormattedData_PerfOS_Processor |
Información detallada de procesos en el procesador
1 | Get-WmiObject Win32_PerfRawData_PerfProc_Process |
Carga del procesador
1 | Get-WmiObject Win32_Processor |
Ejemplo
Ver la carga del procesador
1 | Get-WmiObject Win32_Processor | Select-Object LoadPercentage |
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
1 | Get-WmiObject -Class Win32_Thread |
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
1 | Start-Job |
Alias
1 | sajb |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | DefinitionName {} DefinitionPath {} Type {} Name {} ScriptBlock {Command} Credential {} FilePath {} LiteralPath {PSPath} Authentication {} InitializationScript {} RunAs32 {} PSVersion {} InputObject {} ArgumentList {Args} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} |
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
1 | Get-Service |
Alias
1 | gsv |
Parámetros y alias de los parámetros
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | Name {ServiceName} ComputerName {Cn} DependentServices {DS} RequiredServices {SDO, ServicesDependedOn} DisplayName {} Include {} Exclude {} InputObject {} Verbose {vb} Debug {db} ErrorAction {ea} WarningAction {wa} InformationAction {infa} ErrorVariable {ev} WarningVariable {wv} InformationVariable {iv} OutVariable {ov} OutBuffer {ob} PipelineVariable {pv} |
WMI
1 2 | Get-WmiObject -Class Win32_Service Get-WmiObject -query "select * from win32_service" |
Ejemplo
Ver servicios que están «Running»
1 | Get-WmiObject -Class Win32_Service | Where-Object State -EQ 'Running' |