2013-06-21 7 views
5

Ich habe versucht, herauszufinden, wie man ein Programm beim Booten ausführen, aber nach der Realisierung dieses Programms ist eine Endlosschleife, ich habe keine Möglichkeit, aus oder zurück zum Terminal. Gerade wenn ich die Pi-Power gebe geht es direkt auf das Programm auf schwarzem Hintergrund. Ich erinnere mich nicht genau, was ich getan habe, um es beim Booten laufen zu lassen. Ich glaube, ich habe gerade etwas Code an einer Stelle direkt über etwas hinzugefügt, das "exit 0" und etwas unter "esac" sagt. Ich erinnere mich nicht an den Befehl, der mich überhaupt dorthin gebracht hat. (Ich bin neu auf dem Pi und Python und habe gerade herum gespielt .. unccessfully.)Stop Raspberry Pi aus laufendem Programm beim Booten

Wenn jemand mir helfen könnte, entweder löschen Sie dieses Programm oder erhalten Sie mich in der Lage, es zu bearbeiten, damit ich die Endlosschleife beheben kann wäre großartig. Ich würde die SD-Karte lieber nicht mit einem frischen Raspbian überschreiben müssen. Aber wie ich schon sagte, kann ich beim Booten nichts machen, und Strg + C tut nichts noch Strg + Alt + Entf.

EDIT: Wenn ich die SD-Karte in meinem Computer setzen, sehe ich eine Liste von 11 Dateien: Bootcode cmdline Config Fixup fixup_cd Ausgabe Kernel kernel_cutdown kernel_emergency start.elf start_cd.elf

nichts davon bedeutet nichts für mich ...

+2

Legen Sie die SD-Karte in Ihren Computer ein und entfernen Sie das Programm. – ctn

+0

Ich weiß nicht, was das mit Python zu tun hat. Dies ist ein Linux-Konfigurationsproblem. –

+0

@DanielRoseman Entfernt das Python-Tag – hek2mgl

Antwort

11

Update: Loo ks als hätte ich nicht verstanden, dass du den laufenden Bootprocess unterbrechen und das Script stoppen willst.

Die einfachste Idee wäre, den pi auszuschalten, die SD-Karte zu entfernen und in den Desktop zu stecken, das Skript (erneut) zu verschieben und erneut zu booten.


Prozesse, die während erzeugt werden, werden in Skripten in /etc/init.d/... gespeichert. Diese Skripte werden vom init-Prozess aufgerufen, der erste Prozess auf einem Linux-Rechner (PID: 1)

Aber init startet nicht alle Skripte in /etc/init.d. Dies hängt von der Ausführungsebene ab. Auf einem Debian-System gibt es 7 run levels.

Für jeden Runlevel ein Ordner da wie genannt ist:

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

in denen Softlinks zu Skripte aus /etc/init.d gespeichert.

Um zu verhindern, dass ein Skript bei jedem Start ausgeführt wird, löschen Sie alle Verknüpfungen aus diesen Ordnern. In der Regel auf Debian-Systemen dies geschieht mit dem update-rc.d Werkzeug:

update-rc.d NAME_OF_INIT_SCRIPT remove 

Sie sollten auch einen Blick auf die Datei haben /etc/rc.local

+1

Aber ich kann nicht zu einem Terminalfenster gelangen. Gerade wenn ich es an die Macht gebe, zeigt es mir unendlich lange einen schwarzen Bildschirm mit weißem Text und ich kann es nicht verlassen. – user2506445

+0

können Sie den Text lesen? – hek2mgl

+0

Ich stimme mit @ user2506445 überein - wie stoppst du das laufende Programm, da das übliche CTRL-C nicht funktioniert. Auch zwei Leute haben oben gesagt, dass dies nichts mit python - err zu tun hat, wenn es ein Python - Programm ist und Sie nach einem laufenden Python - Programm suchen ... sicherlich ist es mit Python zu tun (ja, ich weiß es ist auch ein Linux-Ding - sicherlich kann es 2 Tags haben?) –

4

Sie können die cmdline.txt verwenden. Fügen Sie zunächst die Datei cmdline.txt auf Ihrer SD-Karte hinzu oder ändern Sie sie. Fügen Sie "init =/bin/sh" hinzu, starten Sie Ihr Pi neu, und Sie können eine Eingabeaufforderung sehen. Geben Sie 'sudo nano /etc/rc.local' ein, um die Datei zu bearbeiten und die Zeile mit dem Fehler zu kommentieren oder zu löschen. Nach diesem Neustart.

1

Ich hatte genau das gleiche Problem, konnte den Prozess nicht mit STRG + C beenden. Ich habe die cmdline.txt wie oben beschrieben bearbeitet, aber dann hat der pi die notwendigen USB-Treiber für meine Tastatur nicht geladen.

Also irgendwann habe ich mich über SSH an die Pi angemeldet, und meine rc.local-Datei auf diese Weise geändert.

0

Ich hatte das gleiche Problem wie am Anfang dieses Beitrags erläutert. Meine Python-App wurde in einer Endlosschleife gefangen.

Ich versuchte, die Ctrl +Alt + F2 Befehl als ohne Terminal-Fenster offen in Internet in vielen Beiträge empfohlen gefunden. Offensichtlich sah ich nach vielen anderen Versuchen und Neustarts jedes Mal, wenn die Schleife meiner Anwendung neu gestartet wurde, einen Blick auf ein Terminalfenster. Es war unmöglich etwas zu fangen, bis ich den Bildschirm mit dem Zeitlupenvideo meines Mobiltelefons aufnahm und, ja, ein Terminalfenster mit der Linux-Eingabe war aktiv und konnte Tastatureingaben akzeptieren.

Alles, was ich tat, war (fast blind) mit dem es

sudo nano filename command 

und einige Zeichen, um tatsächlich korrupt solche Datei eingeben, Speichern und Schließen des Täter-Datei bearbeiten, ein Pi Neustart. Am Ende des Bootvorgangs erzeugte die Datei einen Fehler, das System war jedoch betriebsbereit.

Ich war dann in der Lage, den Fehler in einer normalen Weise zu beheben. Es hoffen, dass dies für andere nützlich sein kann. In meinem Fall hat es mir erspart, einen neuen Raspbian zu brennen und all meine bisherigen Arbeiten zu verlieren.

1

Alt + PrintScn + k, um den Prozess von rc.local

0

stecken zu töten läuft ich mich in genau dem gleichen Problem stecken geblieben. Zum Glück hatte ich die ssh aktiviert, anscheinend ist das standardmäßig auf Raspbian Jessie deaktiviert, also funktioniert das vielleicht nicht für alle.

Der Exit 0 ist die Zeile in /etc/rc.local, in der Sie das Skript hinzugefügt hätten, das jetzt in einem kontinuierlichen Modus ausgeführt wird. Wenn Sie in die Pi ssh kann mit Putty und die IP-Adresse des Pi dann

sudo nano /etc/rc.local 

Blättern Sie zum Ende der Datei und entfernen Sie das störende Programm, dann sudo reboot

Sie Weg, dies zu verhindern, Problem nicht passiert ist, ein & (Ampersand) an das Ende der Leitung hinzufügen, um den Prozess zu gabeln und es als ein separater Prozess ausgeführt wie so

python /home/pi/myscript.py & 

wie inangegebenen 10

Das kaufmännische Und-Zeichen ermöglicht die Ausführung des Befehls in einem separaten Prozess und das Starten des Befehls bei laufendem Prozess.