first commit

This commit is contained in:
liyp
2026-08-25 22:10:31 -04:00
commit dde12bf30b
41 changed files with 1379 additions and 0 deletions
+69
View File
@@ -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);
}