En informática , kill
es un comando que se utiliza en varios sistemas operativos populares para enviar señales a los procesos en ejecución .
En sistemas operativos Unix y similareskill
, es un comando que se utiliza para enviar una señal a un proceso. De forma predeterminada, el mensaje enviado es la señal de terminación , que solicita que el proceso salga . Pero kill es un nombre poco apropiado; la señal enviada puede no tener nada que ver con la terminación del proceso. El kill
comando es un contenedor de la llamada del sistema , que envía señales a los procesos o grupos de procesos en el sistema, a los que se hace referencia por sus identificadores de proceso numéricos (PID) o identificadores de grupo de procesos (PGID). siempre se proporciona como una utilidad independiente según lo define el estándar POSIX . Sin embargo, la mayoría de los shells tienen comandos integrados que pueden diferir ligeramente de él. [1] [2]kill()
kill
kill
Existen muchas señales diferentes que se pueden enviar (consulte la sección de señales para obtener una lista completa), aunque las señales en las que los usuarios están generalmente más interesados son SIGTERM ("terminar") y SIGKILL ("matar"). La señal predeterminada que se envía es SIGTERM. Los programas que manejan esta señal pueden realizar operaciones de limpieza útiles (como guardar información de configuración en un archivo) antes de salir. Sin embargo, muchos programas no implementan un controlador especial para esta señal, por lo que se llama en su lugar a un controlador de señal predeterminado. Otras veces, incluso un proceso que tiene un controlador especial ha fallado de una manera que le impide manejar correctamente la señal.
Todas las señales excepto SIGKILL y SIGSTOP ("stop") pueden ser "interceptadas" por el proceso, lo que significa que se puede llamar a una función especial cuando el programa recibe esas señales. Las dos excepciones SIGKILL y SIGSTOP solo las ve el núcleo del sistema host, lo que proporciona formas confiables de controlar la ejecución de procesos. SIGKILL mata el proceso y SIGSTOP lo pausa hasta que se recibe un SIGCONT ("continue"). [3]
Unix proporciona mecanismos de seguridad para evitar que usuarios no autorizados eliminen otros procesos. Básicamente, para que un proceso envíe una señal a otro, el propietario del proceso que envía la señal debe ser el mismo que el propietario del proceso que la recibe o ser el superusuario .
Las señales disponibles tienen nombres diferentes y se asignan a determinados números. La asignación específica entre números y señales puede variar entre implementaciones de Unix. SIGTERM suele tener el número 15, mientras que SIGKILL suele tener el número 9.
Se puede enviar una señal SIGTERM a un proceso de cuatro maneras (el ID del proceso es '1234' en este caso):
matar 1234 matar -s TÉRMINO 1234 matar -TÉRMINO 1234 matar -15 1234
Se puede enviar al proceso una señal SIGKILL de tres maneras:
matar -s MATAR 1234 matar -MATAR 1234 matar -9 1234
Otras señales útiles incluyen HUP, TRAP, INT, SEGV y ALRM. HUP envía la señal SIGHUP . Algunos demonios, incluidos Apache y Sendmail , vuelven a leer los archivos de configuración al recibir SIGHUP, por lo que también se puede utilizar el comando kill para esto. Se puede generar una señal SIGINT de forma muy sencilla presionando CTRL+C en la mayoría de los shells de Unix . También es común que + se asigne a SIGTSTP ("terminal stop") y que + (barra invertida) se asigne a SIGQUIT , lo que puede obligar a un programa a realizar un volcado de memoria .CTRLZCTRL\
xmms
invocado por , el usuario ejecutaría el comando killall xmms
. Esto mataría todos los procesos nombrados xmms
y es equivalente a kill `pidof xmms`
en sistemas como Solaris.kill `ps --no-headers -C firefox -o pid`
mientras que con pkill, uno puede simplemente escribir pkill firefox
.El kill
comando también está disponible como un comando integrado en el shell de OS-9 . Se utiliza para matar otro proceso por ID de proceso. [4]
Detener el proceso con el ID de proceso "7":
$ matar 7
En el intérprete de línea de comandos de Microsoft , Windows PowerShell , kill
es un alias de comando predefinido para el Stop-Process
cmdlet .
Microsoft Windows XP , Vista y 7 incluyen el comando taskkill
[5] para finalizar procesos. La sintaxis habitual de este comando es . Se incluyó taskkill /im "IMAGENAME"
una versión "no compatible" de en varias versiones de los kits de recursos de Microsoft Windows disponibles para Windows 98. [6]kill
Las versiones GNU de kill
han sido portadas a través de Cygwin y se ejecutan dentro del subsistema de entorno Unix que proporciona Microsoft Windows Services para UNIX (Microsoft adquirió Windows Services para Unix al por mayor a través de su compra de Softway Systems y su producto Interix el 17 de septiembre de 1999). [7]
La implementación de ReactOS se basa en la variante de Windows. Fue desarrollada por Andrew Riedi, Andrew Nguyen y He Yang. Tiene licencia LGPLv2.1 o posterior. [8]
Encuentre todos los procesos que comienzan con la letra "p" que fueron desarrollados por Microsoft y usan más de 10 MB de memoria y elimínelos:
PS C:\> ps p * | donde { $_ . Empresa -como "Microsoft*" -y $_ . Conjunto de trabajo -gt 10 MB } | kill -confirmConfirmar ¿Está seguro de que desea realizar esta acción? Se está realizando la operación "Detener proceso" en el destino "powershell (6832)". [Y] Sí [A] Sí a todo [N] No [L] No a todo [S] Suspender [?] Ayuda (el valor predeterminado es "Y"): A PS C:\>
He aquí un ejemplo más simple, que solicita al proceso Explorer.exe que finalice:
PS C : \ > taskkill / im explorer.exe
Este ejemplo fuerza la finalización del proceso:
PS C : \ > taskkill / f / imexplorer.exe
Los procesos también pueden eliminarse por su número PID :
PS C:\> taskkill / pid 3476
Singularity Shell , el shell estándar para el sistema operativo de microkernel de Microsoft Research , incluye un comando para finalizar los procesos en segundo plano.kill
Detener el proceso con el nombre "SampleProcess":
Singularidad>matar SampleProcess
Detener el proceso con el identificador de proceso "42":
Singularidad>matar 42
En el caso de Plan 9 de Bell Labs , el programa kill no realiza realmente esta terminación ni toma los identificadores de los procesos, sino que toma los nombres reales de los procesos y genera los comandos para rc , el shell utilizado por Plan 9, para matar el proceso. [9]
Se proporciona un comando similar llamado slay
, que hace lo mismo pero para los procesos que se niegan a ser eliminados de esta manera. [9]
Por ejemplo, para matar todas las instancias de troff , se escribe:
matar a troff | rc
El comando kill también ha sido portado al sistema operativo IBM i . [10]