La comanda skill envia un senyal a tots els processos que compleixen un criteri: els d’un usuari, els d’un terminal, els que tenen un nom concret… La seva germana snice fa el mateix però canviant-ne la prioritat. Totes dues formen part del paquet procps (el mateix de ps, top o kill).
Avui skill i snice estan obsoletes. La seva pròpia pàgina del manual ho diu: «aquestes eines són obsoletes i poc portables, i la sintaxi està mal definida; fes servir killall, pkill i pgrep». Encara venen instal·lades a Debian i Ubuntu, però per a scripts i per a l’ús diari les alternatives actuals són pkill (enviar senyals) i renice (canviar prioritats). En aquest post t’explico totes dues coses.
Sintaxi
skill [senyal] [opcions] criteri
snice [prioritat] [opcions] criteri
El senyal per defecte de skill és TERM. El criteri pot ser un usuari, un terminal, un PID o un nom de comanda; per evitar ambigüitats, indica’l amb aquestes opcions:
| Opció | El criteri és… |
|---|---|
-u usuari | Un usuari |
-t terminal | Un terminal (pts/0, tty1…) |
-p pid | Un número de procés |
-c comanda | Un nom de comanda |
Opcions més útils
| Opció | Què fa |
|---|---|
-n, --no-action | Simulació: diu què faria sense fer-ho |
-i, --interactive | Demana confirmació per a cada procés |
-v, --verbose | Explica què fa |
-l / -L | Llista els noms dels senyals (-L, en forma de taula) |
Senyals més habituals
| Senyal | Número | Què fa |
|---|---|---|
TERM | 15 | Demana al procés que acabi (pot desar i tancar ordenadament). És el valor per defecte |
KILL | 9 | El mata immediatament, sense que pugui fer res. Només si TERM no funciona |
HUP | 1 | Molts serveis el fan servir per tornar a llegir la configuració |
STOP | 19 | Congela el procés (no es pot ignorar) |
CONT | 18 | Reprèn un procés congelat |
Els números són els de Linux en x86 i ARM; als scripts, millor fer servir el nom.
Exemples amb skill
Abans de res, fes una simulació amb -n per veure què afectaria:
$ skill -n -c dormilega
? oscar 2016611 dormilega Success
? oscar 2016613 dormilega Success
Congelar i reprendre tots els processos amb aquest nom:
skill -STOP -c dormilega
skill -CONT -c dormilega
Acabar tots els processos de l’usuari joan (cal ser root per tocar processos d’altres usuaris):
sudo skill -TERM -u joan
Rebaixar la prioritat d’una comanda amb snice (per defecte, +4):
snice +7 -c compilador
L’alternativa actual: pgrep, pkill i renice
Amb skill / snice | Amb les eines actuals |
|---|---|
skill -n -c nom | pgrep -l nom |
skill -TERM -c nom | pkill nom |
skill -KILL -u joan | pkill -KILL -u joan |
skill -STOP -t pts/2 | pkill -STOP -t pts/2 |
snice +5 -c nom | renice -n 5 -p $(pgrep -d' ' nom) |
Exemples reals:
# Primer, comprova què coincideix (pgrep no envia res)
$ pgrep -a dormilega
2016611 ./dormilega 300
2016613 ./dormilega 301
# Baixar-ne la prioritat
$ renice -n 5 -p $(pgrep -d' ' dormilega)
2016611 (process ID) old priority 0, new priority 5
2016613 (process ID) old priority 0, new priority 5
# Acabar-los, mostrant què fa (-e)
$ pkill -e dormilega
dormilega killed (pid 2016611)
dormilega killed (pid 2016613)
Un consell amb pkill: el nom és un patró, i pkill ssh també mataria sshd o ssh-agent. Fes servir -x perquè coincideixi exactament amb el nom, i prova sempre abans amb pgrep amb les mateixes opcions.
Compte amb…
- Matar tots els processos d’un usuari (
skill -KILL -u joanopkill -KILL -u joan) li tanca la sessió de cop i pot fer perdre feina. Si el que vols és tancar-li la sessió,loginctl terminate-user joanés més net. - No comencis per
KILL: dona primer aTERMl’oportunitat de tancar bé el procés. - Prioritats negatives (més prioritat) amb
sniceorenicenomés les pot posar root.
Correccions respecte a la versió antiga d’aquest post
- El nom no ve de «signal processes of a given user id»:
skillpot seleccionar processos per usuari, terminal, PID o nom de comanda. - No cal «estar al mateix grup de processos»: pots enviar senyals als teus propis processos; per als d’altres usuaris cal ser root.
Comandes relacionades
- Comandes per gestionar el sistema a Linux:
top,uname,whoamii altres comandes bàsiques. logoutiexit: tancar la teva sessió.shutdown: apagar o reiniciar el sistema.