2013-06-21 15 views
5

Próbowałem dowiedzieć się, jak uruchomić program podczas startu, ale po uruchomieniu tego programu jest nieskończona pętla, nie mam sposobu na wyjście lub powrót do terminala. Właśnie wtedy, gdy daję moc Pi, po prostu idzie ona do programu na czarnym tle. Nie pamiętam dokładnie, co zrobiłem, aby uruchomić go przy starcie, myślę, że właśnie dodałem jakiś kod w miejscu tuż nad czymś, co powiedział "exit 0" i poniżej czegoś, co mówi "esac". Nie pamiętam rozkazu, który mnie tam dopadł. (Jestem nowy w Pi i Pythonie i bawiłem się po prostu ... bez sensu.)Zatrzymaj Raspberry Pi przed uruchomieniem programu przy bootowaniu

Jeśli ktoś może mi pomóc albo usunąć ten program, albo sprawić, że będę mógł go edytować, mogę naprawić nieskończoną pętlę, byłoby wspaniale. Wolałbym nie musieć całkowicie przepisywać karty SD świeżemu raspbijczykowi. Ale tak jak powiedziałem, nie mogę nic zrobić przy starcie, a Ctrl + C nic nie robi ani Ctrl + Alt + Delete.

EDIT: Kiedy wkładam kartę SD w moim komputerze, widzę listę 11 pliki: bootcode cmdline config fixup fixup_cd problem jądro kernel_cutdown kernel_emergency start.elf start_cd.elf

Żaden z nich nie znaczy nic dla mnie ...

+2

Włóż kartę SD do komputera i wyjmij program. – ctn

+0

Nie wiem, co to ma wspólnego z Pythonem. To jest problem z konfiguracją Linuksa. –

+0

@DanielRoseman Usunięto tag python – hek2mgl

Odpowiedz

11

Aktualizacja: Loo ks jak nie udało mi się dostać, że chcesz przerwać uruchomiony bootprocess i zatrzymać skrypt.

Najprostszym pomysłem jest obrócenie pi, odłączenie karty SD i podłączenie jej do pulpitu, (ponowne) przeniesienie skryptu i ponowne uruchomienie.


Procesy spawnowane są przechowywane w skryptach w /etc/init.d/.... Skrypty te wywoływane są przez proces init, pierwszy proces na komputerze z systemem Linux (PID: 1)

Ale init nie uruchamia wszystkich skryptów w /etc/init.d. To zależy od poziomu uruchamiania. W systemie Debian istnieje 7 run levels.

Na każdym poziomie roboczym znajduje się folder o nazwie jak:

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

w którym są softlinks do skryptów z /etc/init.d są przechowywane.

Aby usunąć skrypt z wykonywania na każdym rozruchu, usuniesz wszystkie linki z tych folderów. Zazwyczaj na systemach Debian odbywa się to za pomocą narzędzia update-rc.d:

update-rc.d NAME_OF_INIT_SCRIPT remove 

Należy również spojrzeć na pliku /etc/rc.local

+1

Ale nie mogę dostać się do okna terminala. Kiedy daje mi to moc, pokazuje mi czarny ekran z białym tekstem w nieskończoność i nie mogę z niego wyjść. – user2506445

+0

Czy umiesz czytać tekst? – hek2mgl

+0

Zgadzam się z @ user2506445 - jak zatrzymać uruchomiony program, jak zwykle nie działa CTRL-C. Również dwie osoby skomentowały powyższe stwierdzenie, że nie ma to nic wspólnego z pythonem - err, jeśli jest to program python, a wy szukaliście sposobu na zatrzymanie działającego programu Pythona ... na pewno jest tak naprawdę z pytonem (tak, wiem to też sprawa z Linuksem - z pewnością może mieć 2 tagi?) –

4

Można użyć cmdline.txt. Najpierw dodaj lub zmodyfikuj plik cmdline.txt na karcie SD. Dodaj "init =/bin/sh", a następnie zrestartuj Pi, a zobaczysz wiersz polecenia. Wpisz "sudo nano /etc/rc.local", aby edytować plik, i skomentuj lub usuń wiersz zawierający błąd. Po tym ponownym uruchomieniu.

1

Miałem dokładnie ten sam problem, nie mogłem zamknąć procesu za pomocą CTRL + C. Edytowałem plik cmdline.txt, jak opisano powyżej, ale wtedy pi nie załadowało niezbędnych sterowników USB dla mojej klawiatury.

W końcu zalogowałem się przez SSH do pi i zmodyfikowałem plik rc.local w ten sposób.

0

Miałem ten sam problem, co wyjaśniono na początku tego postu. Moja aplikacja Pythona została złapana w nieskończoną pętlę.

Próbowałem Ctrl + alt + F2 poleceń jako zalecany w wielu stanowisk znajdujących się w Internecie bez okno terminalu jest otwarta. Wygląda na to, że po wielu innych próbach i ponownych uruchomieniach zobaczyłem okienko terminala za każdym razem, gdy pętla mojej aplikacji została ponownie uruchomiona. Nie udało mi się niczego złapać, dopóki nie zacząłem nagrywać ekranu za pomocą wideo w zwolnionym tempie mojego telefonu komórkowego i, tak, okno terminala z monitem Linuksa było aktywne i było w stanie akceptować wpisy z klawiatury.

Wszystko zrobiłem było (prawie na ślepo) edycję pliku niedokrwienie z

sudo nano filename command 

i wprowadzając kilka znaków w celu faktycznie uszkodzony takiego pliku, zapisywanie i zamykanie niego, restartowania PI. Po zakończeniu rozruchu plik wygenerował błąd, ale system był gotowy do pracy.

Byłem wtedy w stanie naprawić błąd w normalny sposób. Mam nadzieję, że może to być przydatne dla innych. W moim przypadku zaoszczędziłem mi na spaleniu nowego Raspbina i utracie całej mojej poprzedniej pracy.

1

Alt + PrintScn + k zabić proces zatrzymany biegnący od rc.local

0

mam utknąłem w dokładnie ten sam problem. Na szczęście miałem włączone ssh, najwyraźniej jest to domyślnie wyłączone na Raspbian Jessie, więc to może nie działać dla wszystkich.

Wyjście 0 jest linią w /etc/rc.local, gdzie zostałby dodany skrypt, który działa teraz w trybie ciągłym. Jeśli można ssh do Pi przy użyciu Putty i PI za adresem IP a następnie

sudo nano /etc/rc.local 

Przewiń w dół do dolnej części pliku i usunąć program przestępstwa, a następnie sudo restart

one sposób, aby temu zapobiec problem z dzieje jest dodanie & (ampersanda) na końcu linii do stołu proces i uruchomić go jako oddzielny proces jak tak

python /home/pi/myscript.py & 

jak określono w https://www.raspberrypi.org/documentation/linux/usage/rc-local.md

Znak ampersand pozwala na uruchomienie komendy w oddzielnym procesie i kontynuowanie rozruchu z uruchomionym procesem.