如何控制后台进程/守护进程

Chr*_*ber 4 c++ linux daemon background-process

我目前正在尝试为 Linux 创建一个 C++ 程序,我对它还很陌生。该程序应该在后台执行其操作(网络通信和计算),并且可以使用终端命令进行控制,例如“prog” -start”、“prog -stop”、“prog -limitUp 1000”。

我实现这一点的想法是将程序创建为始终在后台运行的守护进程。为了控制整个事情,我想设置一个 linux 命令,它将给定的参数传递给我的程序的主函数,并尝试重新连接到后台的守护进程以执行给定的命令。

实现此类功能的最佳方法是什么(即在后台监听的守护进程和可用于控制它的客户端/命令)。

sas*_*alm 5

这是使用 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;
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述