kolibrios/programs/cmm/lib/patterns/restart_process.h

76 lines
1.6 KiB
C

#ifndef INCLUDE_RESTART_PROCESS_H
#define INCLUDE_RESTART_PROCESS_H
#ifndef INCLUDE_KOLIBRI_H
#include "../lib/kolibri.h"
#endif
enum {
MULTIPLE,
SINGLE
};
#define MAX_PROCESS_COUNT 256
:bool CheckProcessExists(dword proc_name) {
int i;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
GetProcessInfo(#Process, i);
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
return 1;
}
return 0;
}
:void KillProcessByName(dword proc_name, byte multiple) {
int i;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
if (i > GetProcessInfo(#Process, i)) break;
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
{
KillProcess(Process.ID);
if (multiple==SINGLE) break;
}
}
}
:int GetProcessesCount(dword proc_name) {
int i, count=0;
proc_info Process;
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
if (i > GetProcessInfo(#Process, i)) break;
if (Process.status_slot != TSTATE_FREE)
&& (strcmpi(#Process.name, proc_name)==0)
count++;
}
return count;
}
:void RestartProcessByName(dword proc_name, byte multiple) {
KillProcessByName(proc_name + strrchr(proc_name, '/'), multiple);
RunProgram(proc_name, "");
}
:void RestartAllProcess() {
int i;
proc_info Process, Self;
GetProcessInfo(#Self, -1);
for (i=0; i<MAX_PROCESS_COUNT; i++)
{
if (i > GetProcessInfo(#Process, i)) break;
if (Process.name)
&& (Process.ID != Self.ID)
KillProcess(Process.ID);
}
RunProgram("/sys/launcher", NULL);
}
#endif