spdio 1 Denunciar post Postado Julho 6, 2012 Boa noite galera, td bem? Preciso de ajuda para gerenciar a execução de um programa. Imaginem um ambiente onde um programa é executado várias vezes com tempo definido (5 em 5 minutos por exemplo), ele faz uma leitura de varios arquivos e trata. Quando em um destes intervalos ele trava, ou demora mais que 5 minutos ele começa a "juntar" processos no tasklist. A minha dúvida é se tem como eu tratar esse programa pra quando ele for executado, ele conferir se já existe um processo anterior "matar" esse mais antigo? Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Denilson Telaroli 7 Denunciar post Postado Julho 7, 2012 em C não sei fazer... mas a técnica que a galera usa é a seguinte: gravar o pid (process id) do processo em um arquivo texto, por exemplo, e antes de executar perguntar se o processo do pid gravado ainda está rodando, se tiver não executa novamente. pesquise como salvar e capturar os processos na linguagem em questão que você terá uma solução simples assim. Boa noite galera, td bem? Preciso de ajuda para gerenciar a execução de um programa. Imaginem um ambiente onde um programa é executado várias vezes com tempo definido (5 em 5 minutos por exemplo), ele faz uma leitura de varios arquivos e trata. Quando em um destes intervalos ele trava, ou demora mais que 5 minutos ele começa a "juntar" processos no tasklist. A minha dúvida é se tem como eu tratar esse programa pra quando ele for executado, ele conferir se já existe um processo anterior "matar" esse mais antigo? Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Julho 7, 2012 Qual sistema operacional você está usando? A solução vai ser diferente para cada sistema operacional. Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
spdio 1 Denunciar post Postado Julho 10, 2012 Boa noite pessoal, desculpem a demora! Denilson Telaroli, entendi o que quis dizer e Renato Utsch uso o WindowsServer 2003, mas quem chama esse programa no Windows é um server Debian. Abraço e obrigado Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Julho 10, 2012 http://stackoverflow.com/questions/7956519/win32-api-how-to-kill-processes-by-name A primeira resposta mostra como matar pelo nome do processo, sem precisar ser pelo pid dele. Agora, lembre-se que é case sensitive, edite o código para não ser ;) Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
spdio 1 Denunciar post Postado Julho 11, 2012 Obrigado novamente Renato, eu utilizei esse código e tive outro problemas, pode me ajudar? Eu sou um programador Java e estou testando uns esquemas de leitura de logs, então, estou metendo a mão no C++. Estou curtindo, só que sabe né? Cada linguagem tem sua peculiaridade, manhas e "hacks", então é f*** saber tudo. Desculpa te incomodar, mas puder me ajudar eu agradeço. Tive esse problema: KillProcessByName("teste.exe"); void KillProcessByName(const char *filename) { HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); PROCESSENTRY32 pEntry; pEntry.dwSize = sizeof (pEntry); BOOL hRes = Process32First(hSnapShot, &pEntry); while (hRes) { if (strcmp(pEntry.szExeFile, filename) == 0) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, (DWORD) pEntry.th32ProcessID); if (hProcess != NULL) { TerminateProcess(hProcess, 9); CloseHandle(hProcess); } } hRes = Process32Next(hSnapShot, &pEntry); } CloseHandle(hSnapShot); } ------ Build started: Project: urafiles, Configuration: Release Win32 ------ Compiling... .\readTxt.cpp(254) : error C2664: 'strcmp' : cannot convert parameter 1 from 'WCHAR [260]' to 'const char *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast urafiles - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 58 up-to-date, 0 skipped ========== Eu procurei a respeito e li que existem duas formas de burlar isso, uma delas é mudar o character Set to "Use Multi-Byte Character Set" e a outra é adicionar um L a string algo como L"Hello World". Tentei as duas, na primeira mudando o character set eu tive problema como restante do projeto, várias outras que ja estao prontas e funcinando ficam com problema de parse. E ao adicionar o L na frente do nome do processo (qd chamo o metodo) tb não tenho resultados. Sabe me dizer onde posso estar errado? Grato Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Julho 11, 2012 O que acontece é que o windows usa WCHAR no pEntry, você tem que converter de char para wchar. Acho que isso deve resolver: if (strcmp(pEntry.szExeFile, (WCHAR *) filename) == 0) Se não, tente isso: if (strcmp(pEntry.szExeFile, reinterpret_cast<WCHAR *>(filename)) == 0) Se ainda não funcionar, tem que converter o filename para wchar, não lembro como é que converte, mas no google deve ter... pesquisa por "how to convert from char to wchar win32 api", deve dar algo... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
spdio 1 Denunciar post Postado Julho 11, 2012 Fala cara, belza? Obrigado novamente! Eu acabei fuçando aqui e alterei o strcmp(pEntry.szExeFile, filename) para wcscmp(pEntry.szExeFile, filename) e o char pelo wchar_t. ompilou sem erros, vou testar e posto o progresso! Obrigado Abraço void KillProcessByName(const wchar_t *filename) { HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, NULL); PROCESSENTRY32 pEntry; pEntry.dwSize = sizeof (pEntry); BOOL hRes = Process32First(hSnapShot, &pEntry); while (hRes) { if (wcscmp(pEntry.szExeFile, filename) == 0) { HANDLE hProcess = OpenProcess(PROCESS_TERMINATE, 0, (DWORD) pEntry.th32ProcessID); if (hProcess != NULL) { TerminateProcess(hProcess, 9); CloseHandle(hProcess); } } hRes = Process32Next(hSnapShot, &pEntry); } CloseHandle(hSnapShot); } Compartilhar este post Link para o post Compartilhar em outros sites
Renato Utsch 24 Denunciar post Postado Julho 11, 2012 Sim, era por isso que você deveria procurar, a função do strcmp() que usa wchar_t... Abraços :D Compartilhar este post Link para o post Compartilhar em outros sites
spdio 1 Denunciar post Postado Julho 11, 2012 Funcionou, muito obrigado meu amigo. Abraço Compartilhar este post Link para o post Compartilhar em outros sites