2012-05-07 12 views
6

Sto lavorando su Linux, ho eseguito il ciclo for su un terminale Linux come segue:Come uccidere un ciclo in esecuzione su linux?

for i in `cat fileName.txt` 
do 
echo $i 
vim $i 
done 

filename.txt è un file contiene la grande no di voci di file che sto apertura in vim editor uno per uno. Ora devo saltare l'apertura di altri file in mezzo. (Cioè devo interrompere il ciclo for). Qualche suggerimento su come ottenere il PID di correre per il ciclo? e uccidere lo stesso. Grazie in anticipo.

+0

Se usi PID e lo uccidi, allora l'intero script finirà, non solo il tuo ciclo continuo. 'ps -A | grep YOUR_SCRIPT_NAME' dovrebbe dare il tuo processo e il suo ID –

+0

Vuoi uccidere il file che hai aperto. Say fileName.txt ha voci come 1.txt 2.txt 3.txt quindi una volta aperto 1.txt, vuoi uccidere quel processo? È corretto ? – m4n07

+0

@Pavan Grazie, ma sto eseguendo il ciclo for sul terminale stesso non in alcun script. – BSalunke

risposta

1

Questo potrebbe anche fare il trucco:

while true ; do killall vim ; done 

È possibile interrompere questo uno con^C come al solito.

+0

No ha dato errore, ad esempio (22400): Operazione non consentita – BSalunke

+0

Si sta eseguendo questo sotto lo stesso utente del ciclo che genera tutti i vims? Inoltre, qualcun altro potrebbe eseguire contemporaneamente allo stesso tempo vim sullo stesso computer, nel qual caso è possibile ignorare l'errore. 'killall' ucciderà comunque qualunque cosa possa. – Thomas

9

Si desidera eliminare il lavoro corrente . Premere CtrlZ. Bash mostrerà qualcosa di simile:

[1]+ Stopped     vim $i 

utilizzare quel numero con kill per inviare il segnale KILL:

kill -9 %1 

e dovrebbe essere ucciso in seguito:

[1]+ Killed     vim $i 
+0

Questo è l'unico modo in cui ho trovato che funziona per uccidere un ciclo di shell in un terminale piuttosto che in uno script. Grazie, non ho trovato la sintassi% n altrove. – andybuckley

1

trovare l'ID di processo (PID) del genitore del processo vim, che dovrebbe essere la shell che esegue il ciclo for. Prova a usare "pstree -p". Quindi, uccidi l'id del processo usando "kill".

0

Per terminare la creazione dei processi vim, è necessario interrompere il ciclo for. Questo ciclo è gestito da un processo bash. Quindi trova il PID del processo e uccidilo. Per fare ciò, trovare la PPID di un processo vim, che è il PID del processo genitore, e terminare il processo padre: ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | xargs kill

È possibile utilizzare questo comando con questa seconda, che ucciderà tutti i processi Vim, per garantire che non restino istanze di vim: ps -elf | tr -s ' ' | grep vim | cut -f4 -d ' ' | xargs kill

Vedo che si è verificato un problema con "autorizzazione non consentita". Questo potrebbe essere causato da una mancanza di autorizzazione, quindi per essere sicuro che ucciderà i processi, puoi chiamare xargs kill con sudo: ps -elf | tr -s ' ' | grep vim | cut -f5 -d ' ' | sudo xargs kill

Problemi correlati