linux: termina l'attività in background
-
06-07-2019 - |
Domanda
Come posso uccidere l'ultima attività in background generata in linux?
Esempio:
doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
Soluzione
C'è una variabile speciale per questo in bash:
kill $!
$! si espande al PID dell'ultimo processo eseguito in background.
Altri suggerimenti
Puoi uccidere per numero di lavoro. Quando metti un'attività in background vedrai qualcosa di simile:
$ ./script &
[1] 35341
Quel [1]
è il numero del lavoro e può essere referenziato come:
$ kill %1
$ kill %% # Most recent background job
Per visualizzare un elenco di numeri di lavori, utilizzare il comando jobs
. Altro da man bash
:
Esistono diversi modi per fare riferimento a un lavoro nella shell. Il carattere
%
introduce un nome lavoro. Il numero di lavoron
potrebbe essere indicato come% n
. Un lavoro può anche essere indicato usando un prefisso del nome usato per avviarlo, o usando una sottostringa che appare nella sua riga di comando. Ad esempio,% ce
fa riferimento a un processoce
interrotto. Se un prefisso corrisponde a più di un lavoro, bash segnala un errore. L'uso di%? Ce
, d'altra parte, si riferisce a qualsiasi lavoro contenente la stringace
nella sua riga di comando. Se la la sottostringa corrisponde a più di un lavoro, bash segnala un errore. I simboli%%
e% +
si riferiscono alla nozione di shell del lavoro corrente, che è l'ultimo lavoro interrotto mentre era in primo piano o avviato in background. Il lavoro precedente potrebbe essere referenziato usando% -
. Nell'output relativo ai lavori (ad esempio, l'output del comando jobs), il lavoro corrente è sempre contrassegnato con un+
e il lavoro precedente con un-
. Un singolo%
(senza specifiche di lavoro di accompagnamento) fa riferimento anche a lavoro attuale.
Il seguente comando fornisce un elenco di tutti i processi in background nella sessione, insieme al pid. Puoi quindi usarlo per terminare il processo.
jobs -l
Esempio di utilizzo:
$ sleep 300 &
$ jobs -l
[1]+ 31139 Running sleep 300 &
$ kill 31139
Questo dovrebbe uccidere tutti i processi in background:
jobs -p | xargs kill -9
skill doB
skill
è una versione del comando kill che ti consente di selezionare uno o più processi in base a un determinato criterio.
Hai bisogno del suo pid ... usa " ps -A " per trovarlo.
questa è una risposta fuori tema, ma, per coloro che sono interessati, può essere utile.
Come nella risposta di @John Kugelman,% è correlato alle specifiche del lavoro. come trovarlo in modo efficiente? usa il comando & amp; pattern di less , sembra che l'uomo usi meno cercapersone (non sono sicuro), in man bash digita & amp;% quindi digita Invio mostrerà solo le righe che contengono '%', per mostrare tutto, digita & amp ;. quindi Invio.
Usa semplicemente il comando killall:
killall taskname
per maggiori informazioni e opzioni più avanzate, digita " man killall " ;.