Mám dva linuxové systémy komunikující přes sokety (Desktop a vývojová deska založená na ARM).
Chci restartovat (nebo resetovat) svou klientskou aplikaci (běžící na vývojové desce), když server odešle konkrétní předdefinovanou zprávu. Nechci restartovat (restartovat) Linux, chci jen, aby se klientská aplikace sama restartovala automaticky.
Nedokážu pochopit, jak by se to mělo udělat.
Přijatá odpověď:
Normální způsob, jak to udělat, je nechat váš program ukončit a použít monitorovací systém k jeho restartu. init
program takový monitorovací systém nabízí. Existuje mnoho různých init programů (SysVinit, BusyBox, Systemd atd.) se zcela odlišnými konfiguračními mechanismy (vždy se zapisuje konfigurační soubor, ale umístění a syntaxe souboru se liší), takže si vyhledejte dokumentaci toho, který používám. Nakonfigurujte init tak, aby spustil váš program při bootování nebo na výslovnou žádost a aby jej restartoval, pokud zanikne. Existují také lepší monitorovací programy, ale nezníte, jako byste je potřebovali. Tento přístup má mnoho výhod oproti tomu, že program provede restart sám:je to standardní, takže můžete restartovat spoustu služeb, aniž byste se museli starat o to, jak jsou vytvořeny; funguje, i když program zemře kvůli chybě.
Existuje standardní mechanismus, jak říci procesu, aby skončil:signály. Pošlete svému programu signál TERM. Pokud váš program potřebuje provést nějaké vyčištění, napište obslužný program signálu. To nebrání tomu, abyste měli příkaz pro konkrétní program, který jej vypne, pokud máte administrativní kanál k odesílání příkazů, jako je tento.