2016-03-23 12 views
3

私は現在、Linux用のC++でプログラムを作成しようとしています。これはかなり新しくなっています。プログラムはバックグラウンドで(ネットワーク通信と計算) "prog -start"、 "prog -stop"、 "prog -limitUp 1000"のような端末からのコマンドで制御することができます。バックグラウンドプロセス/デーモンを制御する方法

私が考えているのは、常にバックグラウンドで実行するデーモンとしてプログラムを作成することでした。すべてのことを制御するために、私はプログラムの主な機能に与えられた引数をとり、与えられたコマンドを実行するためにバックグラウンドでデーモンに再接続しようとするlinuxコマンドを設定することを考えました。

このような機能(バックグラウンドでリッスンするデーモンと、それを制御するために使用できるクライアント/コマンド)を実現する最も良い方法は何ですか。

+2

質問は何ですか? – ensc

+0

UNIXソケット... –

+0

私のアイデアは悪いコーディング/悪いデーモンを使用する –

答えて

3

ここでは、C++/Qtで構築されたプログラムの例を示します。ご覧のように、引数が与えられていなければデーモンとして起動し、指定されたローカルソケットを待ちます。

引数が与えられた場合、そのローカルソケットに接続し、引数を送信します。デーモンはそれを印刷します。

#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

関連する問題