Un alies per matar una aplicació que no es vol tancar

L’amic Zorion m’ha fet notar, via Mastodon, que el procés es pot simplificar amb una comanda que jo desconeixia, pkill. Efectivament, després de consultar-ne el man i de fer-hi un parell de proves, he vist que, per tancar correctament Kodi, hi ha prou amb pkill -9 kodi.bin, de manera que ni tan sols necessite recórrer a un àlies. Apa, ja està, no cal que llegiu la resta de l’article. Gràcies a Zorion![1]Això sí, la diversió i tot el que he après en el procés no m’ho treu ningú 🙂 .

Massa sovint, el media center Kodi es resisteix a l’ordre de tancar, cosa que m’obliga a recórrer al kill -9. Amb un alies, m’estalviaré el procediment habitual (que implica escriure un parell d’ordres en el terminal):

$ ps -e | grep kodi
8457 ? 00:00:00 kodi
8462 ? 00:00:20 kodi.bin
$ kill -9 8462

Senzill, però tediós, repetitiu. Vaig decidir automatitzar-ho amb un àlies que inclouria al .bash_aliases. Després d’investigar en els documents man i en un parell de pdf molt útils, he arribat a arribat a crear el següent àlies que m’ho soluciona:

alias killkodi='victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f1 -d \;` ; if [ "$victima" = "" ] ; then victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f2 -d \;` ; fi ; kill -9 $victima'

Dificultats a resoldre

Es tractava, com feia manualment, d’obtenir (amb ps - e | grep kodi.bin) l’identificador numèric del procés per a utilitzar-lo en l’ordre kill -9; amb cut, es pot obtenir el fragment desitjat (considerat com un «camp» en una línia de text). El problema és que l’identificador pot constar de quatre xifres o de cinc; en el primer cas, això fa aparèixer un espai blanc al davant, cosa que converteix l’indicador en el segon camp; en canvi, si consta de cinc xifres, no hi ha cap espai en blanc al davant i, aleshores, l’indicador és el primer camp de la línia.

La solució passa per introduir un if ... then ... fi després d’extreure el primer camp de la línia i comprovar si el fragment extret és una cadena nul·la [""]; de ser així, cal extreure’n el segon, que contindrà el codi que busquem. En canvi, si la primera cadena que hem extret no és nul·la, no cal fer-hi res més perquè ja hem obtingut el codi numèric que cercàvem, l’hem assignat a la variable $victima i podem emprar kill -9 $victima sense més complicació.

Implementació de la solució

Ús l’explique breument els blocs lògics que formen l’ordre:

  1. de primer, assigna a la variable $victima el valor del primer camp (victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f1 -d \;`) ;
  2. si $victima es una cadena nul·la (if [ "$victima" = ""]), aleshores (then) assigna a $victima el valor del segon camp (victima=`ps -e | grep kodi.bin | tr " " ";" | cut -f2 -d \;`); finalment,
  3. mata l’aplicació utilitzant-ne l’indicador numèric correcte (kill -9 $victima).

Ja estava familiaritzat[2]Més que familiaritzat, n’estava fart. amb ps -e | grep kodi.bin per a obtindre l’indicador de l’aplicació que volia matar, així com amb kill -9. Vaig haver, però, de descobrir cut per a automatitzar l’extracció de l’indicador de l’aplicació, i de tr per a establir prèviament un separador de camps fàcil de manipular [;][3]Escalera, Sergio; Masip, David. Iniciació a l’administració de sistemes. Universitat de Barcelona, Dept. Matemàtica Aplicada i Anàlisi (presentació en pdf). Diapositives 182 i 183.. Com que estava desentrenat amb això del Bash, em va vindre bé consultar una breu introducció per refrescar conceptes molt bàsics[4]Suppi Boldrito, Remo. Programació d’ordres combinades (shell scripts). UOC. Document en pdf..

Espere que la representació dels tres tipus de cometes utilitzats en el codi siga la correcta! Els comandaments que proporcionen el codi numèric que s’ha d’assignar a $victima van entre accents greus [`]. La definició del àlies va entre cometes simples ['], cosa que obliga a emprar les cometes dobles ["] per indicar arguments a l’ordre tr.

Ara, sí, ja puc tancar el Kodi des del terminar de manera ràpida i còmoda.

Referències, comentaris, destrellats...

Referències, comentaris, destrellats...
1 Això sí, la diversió i tot el que he après en el procés no m’ho treu ningú 🙂 .
2 Més que familiaritzat, n’estava fart.
3 Escalera, Sergio; Masip, David. Iniciació a l’administració de sistemes. Universitat de Barcelona, Dept. Matemàtica Aplicada i Anàlisi (presentació en pdf). Diapositives 182 i 183.
4 Suppi Boldrito, Remo. Programació d’ordres combinades (shell scripts). UOC. Document en pdf.
Cookies? Galetes? Bunyols! Aquest blog utilitza bunyols per... bé, us mentiria si us digués que sé per a què punyetes utilitza bunyols aquest blog; a més, els bunyols els posa Wordpress, no jo, que no els vist mai. Però, com que la llei mana que us n'avise, avisats quedeu.
Accepte els bunyols
No vull bunyols, que engreixen!