first commit
This commit is contained in:
+69
@@ -0,0 +1,69 @@
|
||||
#include "OsSample.h"
|
||||
#include "work.h"
|
||||
#include "canDriver.h"
|
||||
#include "network.h"
|
||||
|
||||
#define APP_NAME "UniversalCan"
|
||||
|
||||
int SearchPreProcess(const char* processName);
|
||||
void KillPreProcess(const char* processName);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
//此程序必须只有一个进程在运行
|
||||
while (SearchPreProcess(APP_NAME) == ENABLE)
|
||||
{
|
||||
//杀死上一个进程
|
||||
KillPreProcess(APP_NAME);
|
||||
printf("Kill Pre Process\n");
|
||||
//等待进程里面的socket和内存被释放
|
||||
vTaskDelay(500);
|
||||
}
|
||||
// 初始化队列和任务等等
|
||||
// 初始化网络
|
||||
NetProcessInit(LISTEN_PORT);
|
||||
// 初始化CAN
|
||||
CanProcessInit();
|
||||
// 初始化network
|
||||
|
||||
vTaskStartScheduler();
|
||||
}
|
||||
|
||||
// 查找是否有指定名称的进程在运行(排除自身)
|
||||
int SearchPreProcess(const char* processName)
|
||||
{
|
||||
char cmd[512];
|
||||
|
||||
#ifdef _WIN32
|
||||
DWORD currentPID = GetCurrentProcessId();
|
||||
// Windows 下通常需要 .exe 后缀,建议传入时带上或在这里处理
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
"tasklist | findstr \"%s\" | findstr /v \"%lu\" > nul",
|
||||
processName, currentPID);
|
||||
#elif defined(__linux__)
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
"pgrep -x \"%s\" | grep -v %d > /dev/null 2>&1",
|
||||
processName, getpid());
|
||||
#endif
|
||||
|
||||
return system(cmd) == 0 ? ENABLE : DISABLE;
|
||||
}
|
||||
|
||||
// 杀死指定名称的同名进程(排除自身)
|
||||
void KillPreProcess(const char* processName)
|
||||
{
|
||||
char cmd[512]; // 稍微加大 buffer 以防万一
|
||||
|
||||
#ifdef _WIN32
|
||||
DWORD currentPID = GetCurrentProcessId();
|
||||
// 逻辑不变,仅参数化进程名
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
"for /f \"tokens=2\" %%a in ('tasklist ^| findstr \"%s\"') do if not %%a==%lu taskkill /F /PID %%a",
|
||||
processName, currentPID);
|
||||
#elif defined(__linux__)
|
||||
snprintf(cmd, sizeof(cmd),
|
||||
"pgrep -x \"%s\" | grep -v %d | xargs -r kill -9 > /dev/null 2>&1",
|
||||
processName, getpid());
|
||||
#endif
|
||||
system(cmd);
|
||||
}
|
||||
Reference in New Issue
Block a user