每月网站流量,杭州制作网站个人,wordpress 在线教育主题,手机网站建设liedns1、Linux/OSX 上面重新运行程序#xff0c;直接使用 execvp 函数就可以了#xff0c;把main 函数传递来的 argv 二维数组#xff08;命令行参数#xff09;传进去就可以#xff0c;注意不要在 fork 出来的子进程搞。 2、Windows 平台可以通过 CreateProcess 函数来创建新的…1、Linux/OSX 上面重新运行程序直接使用 execvp 函数就可以了把main 函数传递来的 argv 二维数组命令行参数传进去就可以注意不要在 fork 出来的子进程搞。 2、Windows 平台可以通过 CreateProcess 函数来创建新的进程在把自己结束退出就可以了还有一个办法是比较暗黑的做法就是通过替换进程的内存来实现替换进程但容易被杀毒软件爆毒就是 Windows 平台上的替换进程技术。 源实现大概是这样的。
#if defined(_WIN32)ppp::string command_line \ ppp::string(*argv) \;for (int i 1; i argc; i) {command_line \ ppp::string(argv[i]) \; }STARTUPINFOA si;PROCESS_INFORMATION pi;ZeroMemory(si, sizeof(si));si.cb sizeof(si);ZeroMemory(pi, sizeof(pi));if (CreateProcessA(NULL, command_line.data(), NULL, NULL, FALSE, 0, NULL, NULL, si, pi)){CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}
#elseexecvp(*argv, (char**)argv);
#endif