diff --git a/src/server/WebBackend.cpp b/src/server/WebBackend.cpp index 43aae6c..ba256f1 100644 --- a/src/server/WebBackend.cpp +++ b/src/server/WebBackend.cpp @@ -100,7 +100,7 @@ RestOutputStruct::ExitCode WebSocket::EvaluateBackendRequest(const RestInputStru return EvaluateSysadmNetworkRequest(IN.args, out); }else if(namesp=="rpc" && name=="syscache"){ return EvaluateSyscacheRequest(IN.args, out); - }else if(namesp=="sysadm" && name=="systeminfo"){ + }else if(namesp=="sysadm" && name=="systemmanager"){ return EvaluateSysadmSystemMgmtRequest(IN.args, out); }else if(namesp=="sysadm" && name=="update"){ return EvaluateSysadmUpdateRequest(IN.args, out); @@ -317,6 +317,10 @@ RestOutputStruct::ExitCode WebSocket::EvaluateSysadmSystemMgmtRequest(const QJso ok = true; out->insert("externalmounts", sysadm::SysMgmt::externalDevicePaths()); } + if(act=="killproc"){ + ok = true; + out->insert("killproc", sysadm::SysMgmt::killProc(in_args.toObject())); + } if(act=="memorystats"){ ok = true; out->insert("memorystats", sysadm::SysMgmt::memoryStats()); diff --git a/src/server/library/sysadm-systemmanager.cpp b/src/server/library/sysadm-systemmanager.cpp index 530b7bd..176e5a6 100644 --- a/src/server/library/sysadm-systemmanager.cpp +++ b/src/server/library/sysadm-systemmanager.cpp @@ -161,6 +161,49 @@ QJsonObject SysMgmt::externalDevicePaths() { return retObject; } +// Kill a process +QJsonObject SysMgmt::killProc(QJsonObject jsin) { + QJsonObject retObject; + + QStringList keys = jsin.keys(); + if (! keys.contains("pid") ) { + retObject.insert("error", "Missing required key 'pid'"); + return retObject; + } + // Save the target + QString pid, sig, tmp; + pid = jsin.value("pid").toString(); + + if ( keys.contains("signal") ) { + tmp = jsin.value("signal").toString(); + if ( tmp == "HUP" ) { + sig = "-1"; + } else if ( tmp == "INT" ) { + sig = "-2"; + } else if ( tmp == "QUIT" ) { + sig = "-3"; + } else if ( tmp == "ABRT" ) { + sig = "-6"; + } else if ( tmp == "KILL" ) { + sig = "-9"; + } else if ( tmp == "ALRM" ) { + sig = "-14"; + } else if ( tmp == "TERM" ) { + sig = "-15"; + } else { + retObject.insert("error", "Invalid signal! (INT|QUIT|ABRT|KILL|ALRM|TERM)"); + return retObject; + } + } else { + sig = "-9"; + } + + // This could be switched to kill(2) at some point + General::RunCommand("kill " + sig + " " + pid); + + return jsin; +} + // Return information about memory QJsonObject SysMgmt::memoryStats() { QJsonObject retObject; diff --git a/src/server/library/sysadm-systemmanager.h b/src/server/library/sysadm-systemmanager.h index cd27d56..90b2944 100644 --- a/src/server/library/sysadm-systemmanager.h +++ b/src/server/library/sysadm-systemmanager.h @@ -18,9 +18,10 @@ public: static QJsonObject cpuPercentage(); static QJsonObject cpuTemps(); static QJsonObject externalDevicePaths(); + static QJsonObject killProc(QJsonObject); static QJsonObject memoryStats(); - static QJsonObject systemInfo(); static QJsonObject procInfo(); + static QJsonObject systemInfo(); }; } //end of pcbsd namespace