2016-03-23 8 views
3

Ich versuche gerade, ein Programm in C++ für Linux zu erstellen, und ich bin ziemlich neu dazu. Das Programm sollte seine Sachen (Netzwerkkommunikation und Berechnungen) im Hintergrund und könnte mit Befehlen vom Terminal gesteuert werden, wie "prog-start", "prog-stop", "prog -limitUp 1000".Wie man einen Hintergrundprozess/Daemon steuert

Meine Idee zu realisieren, war das Programm als Daemon zu erstellen, um immer im Hintergrund zu laufen. Um die ganze Sache zu kontrollieren, habe ich gedacht, einen Linux-Befehl zu erstellen, der die gegebenen Argumente zur Hauptfunktion meines Programms bringt und versucht, sich im Hintergrund wieder mit dem Daemon zu verbinden, um den gegebenen Befehl dann auszuführen.

Was ist der beste Weg, um diese Funktionalität zu erreichen (d. H. Ein Daemon, der im Hintergrund zuhört und ein Client/Befehl, mit dem er gesteuert werden kann).

+2

was ist die Frage? – ensc

+0

Unix Sockets ... –

+0

wäre meine Idee schlecht coding/bad Verwendung von Daemons –

Antwort

3

Hier ist ein Beispielprogramm, das mit C++/Qt erstellt wurde. Wie Sie sehen können, startet der Prozess als Daemon, wenn keine Argumente gegeben werden und er einen benannten lokalen Socket abhört.

Wenn Argumente angegeben werden, stellt es eine Verbindung zu diesem lokalen Socket her und sendet seine Argumente. Der Daemon druckt sie dann aus.

#include <QCoreApplication> 
#include <QLocalServer> 
#include <QLocalSocket> 
#include <QStringList> 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 

    if (a.arguments().size() == 1) { 
     // Act as a server. 
     QLocalServer server; 
     server.listen("MyDaemon"); 
     while (server.waitForNewConnection(-1)) { 
      QLocalSocket *socket = server.nextPendingConnection(); 
      socket->waitForReadyRead(); 
      qDebug() << "received message" << socket->readAll(); 
      delete socket; 
     } 
    } else { 
     // Act as a client. 
     QLocalSocket socket; 
     socket.connectToServer("MyDaemon"); 
     socket.waitForConnected(); 
     socket.write(a.arguments().join(' ').toUtf8() + "\n"); 
     socket.waitForBytesWritten(); 
    } 

    return 0; 
} 

enter image description here

Verwandte Themen