Linux angstrom, proces zawieszany

0

Witam

Pewnie źle dobrałem kategorię ale nie znalazłem LINUX. Jestem w kropce i szukam pomocy, mam program napisany w C++/QT i kiedy uruchomię go zdalnie przez SSH to pracuje bez zarzutu. Niestety jak tylko wystartuje on razem ze startem systemu zawiesza się,a dokładniej przestaje reagować na cokolwiek, 0%CPU ale pamięć ma zajętą ( dane z top). Próbowałem uruchamiać go w rc.local i jako skrypt w /etc/init.d ale nic to nie zmienia.
Czy mieliście już podobny problem, albo macie jakiś pomysł co może być problemem?

Będę bardzo wdzięczny za pomoc.

0

A przypadkiem nie próbujesz odpalić graficznej aplikacje zanim wstanie menadżer okien?
Uruchamiasz ją w tle?

Trudno wywróżyć co jest nie tak, bo nie wiadomo co robi owa aplikacja ani dokładnie w którym momencie ją uruchamiasz.

0
nalik napisał(a):

A przypadkiem nie próbujesz odpalić graficznej aplikacje zanim wstanie menadżer okien?

Uruchamiam ją w rc.local
Jeżeli dobrze rozumiem hierarchię uruchamiania to plik rc.local wstaje ostatni więc wszystkie procesy poboczne powinny być odpalone wcześniej.

Aplikacja korzysta z połączenia TCP i po odłączeniu urządzenia od sieci działa ono dłużej, a gdy usunąłem połączenie TCP aplikacja wydaje się działać dłużej ( ale to dopiero pół godziny).

Myślę że może to być problem właśnie z siecią, ponieważ na tym samym linuksie uruchomiłem inny program bez interfejsu sieciowego i nie wykazywał on żadnych problemów.

0

Aplikacja uruchamia się, zmienia ip ETH0 i zaczyna pytać o dane urządzenie po modbasie TCP.

0
Arkadiusz Grzelka napisał(a):

Uruchamiam ją w rc.local

Jaka dystrybucja, przypadkiem nie używająca systemd?

Aplikacja korzysta z połączenia TCP i po odłączeniu urządzenia od sieci działa ono dłużej, a gdy usunąłem połączenie TCP aplikacja wydaje się działać dłużej ( ale to dopiero pół godziny).

Myślę że może to być problem właśnie z siecią, ponieważ na tym samym linuksie uruchomiłem inny program bez interfejsu sieciowego i nie wykazywał on żadnych problemów.

Staram się, ale nie rozumiem ;). Możesz napisać to na spokojnie, jasno i dokładnie?

0

No więc tak:
Dystrybucja linux ÅNGSTRÖM, nie znalazłem plików systemd więc raczej nie używa.

Urządzenie to prosty panel wyświetlający dane z urządzeń podpiętych do sieci ( hobbystyczny dom inteligentny),

Moja aplikacja uruchamiana jest w pliku rc.local

Aplikacja:
1 Zmienia adres ip portu eth0,
2 Łączy się z urządzeniem pomiarowym przez Modbus TCP
3. Odpytuje to urządzenie, z dużą częstotliwością.

Na tym samym sprzęcie uruchamiam inny program, który nie wykorzystuje warstwy sieciowej i działa on bez zastrzeżeń.
Dlatego myślę że może to być problem właśnie warstwy sieciowej.

0

To nadal za mało by stwierdzić co się dzieje. Najlepiej by było jakbyś podpiął się debuggerem pod działąjący proces i zobaczył co się dzieje (gdb sciezka_do_debugowej_binarki `pidof nazwa_procesu`). Skoro aplikacja nie używa procesora, to być może śpi czekając na coś.
Mogłbyś spróbować wyizolować problem do konkretnej części kodu. Debugger, logowanie, zakomentowanie części kodu.

3

Spróbuj podejrzeć programem "strace", jakie wywołania systemowe wykonuje (będą tam m.in. wszystkie odwołania do sieci). Strace do niektórych typów problemów jest wygodniejsze niż debugger.

Wywołanie: strace -p PID-PROCESU
użyteczne bywa też wskazanie, jakie konkretnie wywołania systemowe ma monitorować (opcja -e).

0

Dzięki za pomoc, niestety teraz nie mam dostępu do tego urzadzenia ale będę informował na bieŻąco (Boże, widzisz takie błędy i nie grzmisz). Mam też pytanie : Czym różni się proces uruchomiony zdalnie przez SSH od procesu uruchomionego w rc.local.?

0

Problem wydaje się być rozwiązany.
Podczas testów pomagałem sobie QDebug i generował on dość duży ruch. Po usunięciu częstych wywołań QDebug problem niestabilności wydaje się być rozwiązany.

Narzędzie strace nie wyrzucało żadnych błędów i wszystkie odwołania wyglądały poprawnie.

W razie jakichkolwiek zmian będę informował na bieżąco.

1
Błękitny Ogórek napisał(a):

Dzięki za pomoc, niestety teraz nie mam dostępu do tego urzadzenia ale będę informował na bieŻąco (Boże, widzisz takie błędy i nie grzmisz). Mam też pytanie : Czym różni się proces uruchomiony zdalnie przez SSH od procesu uruchomionego w rc.local.?

Komendy w rc.local uruchamiają się zazwyczaj przed managerem okien.

Dodatkowo są uruchamiane z uprawnieniami root'a (może że zbijesz uprawnienia - su).

Dostajesz tylko jeden proces na wszystkie instrukcje. Czyli, aby wszsytko było na pewno OK, należy zadbać o forkowanie procesu ("proces &"). Brak tego może spowodować, różne dziwne zachowania w zależności od konfiguracji systemu (niedopełnienie inicjalizacji). (W debianie nic nie powoduje)

0

Tak wygląda mój plik rc.local

#!/bin/sh
if [ -e '/dev/fb0' ] ;
then

    source /etc/setqtenv
    cd /home/root/
    ./StacjaTest -qws&

fi

0 użytkowników online, w tym zalogowanych: 0, gości: 0