Domanda

Come posso uccidere l'ultima attività in background generata in linux?

Esempio:

doSomething
doAnotherThing
doB &
doC
doD
#kill doB
????
È stato utile?

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 lavoro n 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 processo ce 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 stringa ce 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 " ;.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top