soft reset aplikacji linuxowej

0

Na pewnym urządzeniu mam linuxa. I w tle jednym z procesów linuxowych jest moja dedykowana aplikacja, która startuje moje urządzenie, marze po rejestrach urządzenia. To urządzenie komunikuje się też z innym urządzeniem które może mu przesłac rozkaz o reset. Wtedy w mojej apce wykrywam tą sytuację i wykonuj się polecenie w C++:
system("reboot")
Po tym poleceniu system linux się resetuje i m.in. pamięć RAM jest zerowana, startuje moja apka z powrotem.
Jak zrobić cos takiego by system się nie resetował tylko np. zamykała moja apka i startowała ponownie? Próbowałem czegoś takiego:
system("kill -9 $(nazwaMojejApki) && nazwaMojejApki)
co by znaczyło zabij moją apkę i wystartuj ją ponownie. Ale to nie działa bo nawet jak w shellu linuxa wykonam:
kill -9 $(nazwaMojejApki) && nazwaMojejApki
to nic się nie dzieje, ale osobno polecenia już działają.
Jeszcze myślałem o tym by skrypt też jakiś był który byłby wywoływany przez funkcję system("nazwa_skryptu") i w ciele tego skryptu by było zabicie i uruchomienie ponownie mojej apki, ale może nie trzeba skryptu tylko da radę załatwić to bezpośrednio argumentami funkcji system()?

1

z opisu można się domyśleć, że masz błąd w aplikacji, który chcesz "naprawić" restartem aplikacji.
Nie lepiej naprawdę naprawić ten błąd?

Z twoim skilem najlepiej napisz sobie bash script, który będzie uruchamiał ponownie twoją aplikacje zależnie od kodu zakończania aplikacji.

#!/bin/bash 

exitCode=1
while [  $exitCode -eq 1 ]; do
     twojaAplikacja $@
     exitCodeR=$?
done
0

kill -9 $(nazwaMojejApki) && nazwaMojejApki w callu system() nie ma prawa zadziałać z uwagi na sposób, w jaki dystrybuowane są sygnały. Wołanie "reboot" przez system() to też taki sobie pomysł. Zasadniczo powinienneś opędzić to skryptem, tzn. zarówno reset maszyny jak i restart aplikacji.

0

OK napisałem skrypt w bashu:

#!/bin/bash

#kill app
ApkPID=$(pidof DEV_APP)
kill -9 "$ApkPID"

#wait untill killed
while [ $(kill -0 "$ApkPID") ]; do
  sleep 1
done

echo "dev apk process is killed"

#start once again
DEV_APP

exit 0

Chciałem sobie przetestować.
Nazwałem plik "softRestart.sh" wrzuciłem przez ftpa na RAM linuxa, zmieniłem uprawnienia, ale linux nie widzi tego pliku. Zwraca mi:
-sh: ./softRestart.sh not found
-sh: softRestart.sh not found
Zmieniłem nazwę pliku na "softRestart" ale dalej zwraca:
-sh: softRestart not found
-sh: softRestart.sh not found
Zacząłem wobec tego używac ścieżki bezwglednej do wywołania skryptu ale dalej to samo.
Natomiast jak mam C++ program i skompiluję sobie pod architekturę gcc-arma to wtedy po wrzuceniu przez ftpa na ram taka apka startuje. Wobec czego mógłbym przerobić mój skrypt na C++, to ostateczne wyjście, ale przecież skrypt napisany w bashu tez powinien działać skoro uruchamiane w shellu polecenia basha działają bez problemu.

0

z bin/sh też to samo, ale rozwiązałem ten problem poprzez jawne wywołanie
/bin/bash softRestart.sh
Niemniej jednak inny sie problem pojawia. Mianowicie wywołuje

'ash: invalid number '1094 i dla ostatniej linii w pliku syntax error: unexpected end of file (expecting "do").
1094 to pid procesu mojej apki. A ten drugi problem to coś z konwersją formatu pliku, ale co to nie wiem, jeszcze pokombinuje ale czarno to widzę.

0

ok działa, musiałem uruchomić w edyotrze vi plik i pokasowac znaki na końcach liń i wszystko chula.

0

Ktoś wie moze jak uruchomić 2 rożne apki po sobie w skrypcie? Jak uruchomię w skrypcie pierwszy proces to on przejmuje shella linuxa i drugi process juz się nie uruchamia:

#start app1
myApp1
echo "app1 started"

#wait 10s (for app1 start)
sleep 10

#start app2
myApp2
echo "app2 started"

Na konsoli nie mam nawet printa "app1 started" bo app1 po wystartowaniu juz przejęła shella. Gdy patrze jakie procesy zostały uruchomione to mam tylko apkę1.
Natomiast jak ręcznie bez skryptu w 2 róznych shellach startuje aplikacje to one startują.

0

Użyj ampersanda & dla pierwszej apki. Wtedy shell nie zostanie zblokowany i druga apka również wystartuje.
http://stackoverflow.com/questions/13338870/what-does-at-the-end-of-a-linux-command-mean

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