2013-06-21 6 views
5

Stavo cercando di capire come eseguire un programma all'avvio, ma dopo aver realizzato questo programma è un ciclo infinito, non ho modo di uscirne, o tornare al terminale. Giusto quando conferisco il potere a Pi, va direttamente al programma su sfondo nero. Non ricordo esattamente cosa ho fatto per farlo funzionare all'avvio, credo di aver appena aggiunto del codice in un posto proprio sopra qualcosa che diceva "exit 0" e sotto qualcosa che dice "esac". Non ricordo il comando che mi ha persino portato lì. (Sono nuovo al Pi e Python e ho appena giocato in giro ... con successo.)Arresta Raspberry Pi dal programma in esecuzione all'avvio

Se qualcuno mi può aiutare o eliminare questo programma o farmi essere in grado di modificarlo in modo da poter risolvere il ciclo infinito che sarebbe bello. Preferirei non dover sovrascrivere completamente la scheda SD con un nuovo raspbian. Ma come ho detto non posso fare nulla all'avvio, e Ctrl + C non fa nulla, né Ctrl + Alt + Canc.

EDIT: Quando ho messo la scheda SD nel mio computer, vedo un elenco di 11 file: bootcode cmdline config correzione fixup_cd problema kernel kernel_cutdown kernel_emergency start.elf start_cd.elf

Nessuno di questi mi dice niente ...

+2

Inserire la scheda SD nel computer e rimuovere il programma. – ctn

+0

Non so cosa questo abbia a che fare con Python. Questo è un problema di configurazione di Linux. –

+0

@DanielRoseman Rimosso il tag python – hek2mgl

risposta

11

Aggiornamento: Loo ks come se non fossi riuscito a ottenere che si desidera interrompere il processo di avvio in esecuzione e interrompere lo script.

L'idea più semplice sarebbe quella di girare il pi, scollegare la scheda SD e collegarlo al desktop, (ri) spostare lo script e riavviare.


I processi generati durante vengono memorizzati negli script in /etc/init.d/.... Questi script sono chiamati dal processo init, il primo processo su una macchina Linux (PID: 1)

Ma init inizia non tutti gli script in /etc/init.d. Questo dipende dal livello di esecuzione. Su un sistema Debian ci sono 7 run levels.

Per ogni livello di esecuzione v'è una cartella chiamata come:

/etc/rc0.d 
... 
/rc6.d 

in cui sono softlink a script da /etc/init.d vengono memorizzati.

Per rimuovere uno script dall'esecuzione su ogni avvio, eliminerai tutti i collegamenti da tali cartelle. Di solito su sistemi Debian Questo viene fatto usando lo strumento update-rc.d:

update-rc.d NAME_OF_INIT_SCRIPT remove 

Si dovrebbe anche dare un'occhiata al file /etc/rc.local

+1

Ma non riesco ad arrivare ad una finestra di terminale. Giusto quando gli do il potere, mi mostra uno schermo nero con testo bianco all'infinito e non posso uscire da esso. – user2506445

+0

puoi leggere il testo? – hek2mgl

+0

Sono d'accordo con @ user2506445 - come si ferma il programma in esecuzione come il solito CTRL-C non funziona. Anche due persone hanno commentato sopra dicendo che questo non ha nulla a che fare con python - err, se si tratta di un programma python, e stavi cercando come fermare un programma python in esecuzione ... sicuramente è davvero da fare con python (sì lo so è anche una cosa di Linux - sicuramente può avere 2 tag?) –

4

È possibile utilizzare il cmdline.txt. Per prima cosa, aggiungi o modifica il file cmdline.txt sulla tua scheda SD. Aggiungi "init =/bin/sh", quindi riavvia il Pi, e puoi vedere un prompt della riga di comando. Digita 'sudo nano /etc/rc.local' per modificare il file e commenta o elimina la riga contenente l'errore. Dopo questo riavvio.

1

Ho avuto esattamente lo stesso problema, non potevo uscire dal processo utilizzando CTRL + C. Ho modificato il cmdline.txt come detto sopra, ma poi il pi non ha caricato i driver usb necessari per la mia tastiera.

Quindi alla fine ho effettuato il login su SSH al pi, e modificato il mio file rc.local in questo modo.

0

Ho avuto lo stesso problema come spiegato all'inizio di questo post. La mia app Python è stata catturata in un loop infinito.

Ho provato Alt Ctrl + + F2 Comando come raccomandato in molti posti disponibili a Internet senza alcuna finestra terminale essendo aperta. Apparentemente, dopo molte altre prove e riavvii, ho visto un'anteprima di una finestra di Terminale ogni volta che il loop della mia applicazione si riavviava. Non è stato possibile catturare nulla finché non ho iniziato a registrare lo schermo utilizzando il video al rallentatore del mio telefono cellulare e, sì, una finestra del terminale con il prompt di Linux era attiva e in grado di accettare le voci della tastiera.

Tutto quello che ho fatto è stato (quasi alla cieca) la modifica del file colpevole con l'

sudo nano filename command 

e inserendo alcuni personaggi al fine di corrompere in realtà tale file, il salvataggio e la chiusura di esso, un riavvio del Pi. Al termine dell'avvio, il file ha prodotto un errore ma il sistema è stato mantenuto pronto per il funzionamento.

Sono stato quindi in grado di correggere il bug in un modo normale. Spero che questo possa essere utile per gli altri. Nel mio caso mi ha risparmiato il masterizzare un nuovo Raspbian e perdere tutto il mio lavoro precedente.

1

Alt + PrintScn + k per uccidere il processo bloccato in esecuzione da rc.local

0

mi sono fatto bloccato in esattamente lo stesso problema. Fortunatamente ho attivato ssh, apparentemente questo è disabilitato di default su Raspbian Jessie, quindi potrebbe non funzionare per tutti.

L'uscita 0 è la riga in /etc/rc.local in cui si sarebbe aggiunto nello script che è ora in esecuzione in modalità continua. Se si può ssh nel Pi utilizzando Putty e l'indirizzo IP del Pi poi

sudo nano /etc/rc.local 

Scorrere fino alla fine del file e rimuovere il programma incriminato, quindi sudo riavvio

Essi modo per evitare questo problema accada è quello di aggiungere un & (e commerciale) alla fine della riga alla tavola processo ed eseguirlo come un processo separato in questo modo

python /home/pi/myscript.py & 

come specificato in https://www.raspberrypi.org/documentation/linux/usage/rc-local.md

La e commerciale consente di eseguire il comando in un processo separato e continuare l'avvio con il processo in esecuzione.