如何控制background-process/daemon
How to control a background-process/daemon
我目前正在尝试用 C++ 为 Linux 创建一个程序,我对 it.The 很陌生,程序应该在后台完成它的工作(网络通信和计算)并且可以通过终端命令进行控制,例如 "prog -start"、"prog -stop"、"prog -limitUp 1000".
我的想法是将程序创建为始终 运行 在后台运行的守护程序。为了控制整个事情,我想设置一个 linux 命令,它将给定的参数传递给我的程序的主要功能,然后尝试重新连接到后台守护进程以执行给定的命令。
实现此类功能的最佳方式是什么(即在后台侦听的守护进程和可用于控制它的 client/command)。
这是一个用 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;
}
我目前正在尝试用 C++ 为 Linux 创建一个程序,我对 it.The 很陌生,程序应该在后台完成它的工作(网络通信和计算)并且可以通过终端命令进行控制,例如 "prog -start"、"prog -stop"、"prog -limitUp 1000".
我的想法是将程序创建为始终 运行 在后台运行的守护程序。为了控制整个事情,我想设置一个 linux 命令,它将给定的参数传递给我的程序的主要功能,然后尝试重新连接到后台守护进程以执行给定的命令。
实现此类功能的最佳方式是什么(即在后台侦听的守护进程和可用于控制它的 client/command)。
这是一个用 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;
}