[[pagelist(^Ruby/2011년스터디)]] [[TableOfContents]] == 프로ì 트 == * ì¼ì • ì‹œê°„ì´ ì§€ë‚˜ë©´ 웹 브ë¼ìš°ì €ë¥¼ 종료하는 프로그램 만들기 * 0207 : 프로그램 명세. ì—”í¬ì§€ì— 프로ì 트 ìƒì„±([http://nforge.zeropage.org/projects/deletewastes ì—”í¬ì§€ ë§í¬]) == 프로그램 기능 == * OSì—게 현재 ì‹¤í–‰ì¤‘ì¸ ì›¹ 브ë¼ìš°ì €ì˜ ì •ë³´(ì´ ì‹¤í–‰ 시간, 현재 ë·°ì¤‘ì¸ íŽ˜ì´ì§€)를 얻어 ì¼ì •ì‹œê°„ì´ìƒ ì‹¤í–‰ëœ (í‹ì • 사ì´íŠ¸ë¥¼ ë·° 중ì¸) 웹 브ë¼ìš°ì € 종료시키기 == 실행 순서 == * OSì—게 웹 브ë¼ìš°ì €ì˜ ì •ë³´ ì–»ìŒ * ì¼ì •ì‹œê°„ ì´ìƒ ì‹¤í–‰ëœ ì›¹ 브ë¼ìš°ì € 검색 (í˜¹ì€ ì§ì ‘ 카운트) * íŠ¹ì • 사ì´íŠ¸ë¥¼ 뷰중ì¸ì§€ 검색 * 해당 브ë¼ìš°ì €ì—게 종료 메세지 보냄 (í˜¹ì€ ê²½ê³ ì°½ì„ ë„움) == ì˜ˆìƒ ì˜ˆì™¸ì‚¬í• == * 웹 브ë¼ìš°ì €ì˜ ì •ë³´ë¥¼ ì–»ì„ ìˆ˜ ì—†ì„ ë•Œ * ì‹¤í–‰ì¤‘ì¸ ì›¹ 브ë¼ìš°ì €ê°€ ì—†ì„ ë•Œ * 프로세서간 í†µì‹ ì‹¤íŒ¨ì‹œ * 웹 브ë¼ìš°ì €ê°€ 종료ë˜ì§€ ì•Šì„ ë•Œ * ìž˜ëª»ëœ ì›¹ 브ë¼ìš°ì €ì˜ 종료 == ì œì•½ì‚¬í• == * í”„ë¡œì„¸ìŠ¤ê°„ì˜ í†µì‹ * 루비ì—ì„œì˜ ìœˆë„ìš°API사용 == ì˜ˆìƒ ë¬¸ì œì == * 루비와 윈ë„ìš°APIì˜ í˜¸í™˜ì„± * 윈ë„ìš°API 사용법 ìŠµë“ == 추가 ê¸°ìˆ ì‚¬í• == * OS 부팅 ì‹œ ìžë™ 실행 * 웹 브ë¼ìš°ì €ì˜ 페ì´ì§€ 뷰를 기ë¡í•˜ì—¬ 통계 * 멀티 íƒ ë¸Œë¼ìš°ì €ì¼ ë•Œ íƒë§Œ 종료하기 == 배운것 == === 2ì›” 21ì¼ === * 윈ë„ìš° API 테스트 * windows APIë¡œ í”„ë¡œì„¸ìŠ¤ì˜ ì •ë³´ 받아오기 ([http://sosal.tistory.com/100 ì›ë³¸]) {{{ ~cpp #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <Windows.h> #include <TlHelp32.h> void killProcess(TCHAR*); int _tmain(int argc, TCHAR *argv[]){ // snap every current process HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if(hProcessSnap == INVALID_HANDLE_VALUE) { _tprintf(_T("CreateToolhelp32Snapshot erre\n")); exit(EXIT_FAILURE); } // structure to hold process's inform PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); // Process32First :: get the first process snapshot if(!Process32First(hProcessSnap, &pe32)){ _tprintf(_T("Process32First error!\n")); CloseHandle(hProcessSnap); exit(EXIT_FAILURE); } _tprintf(_T("\t[Process name]\t[PID]\t[ThreadID]\t[PPID]\n")); int countProcess=0; do{ countProcess += 1; _tprintf(_T("%25s %8d %8d %8d\n"), pe32.szExeFile, pe32.th32ProcessID, pe32.cntThreads, pe32.th32ParentProcessID); }while(Process32Next(hProcessSnap, &pe32)); printf("number of process = %d", countProcess); return 0; } }}} * íŠ¹ì • 프로세스 죽ì´ê¸° ([http://sosal.tistory.com/entry/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%B6%9C%EB%A0%A5-%EA%B0%95%EC%A0%9C-%EC%A2%85%EB%A3%8C-%EC%86%8C%EC%8A%A4 ì›ë³¸]) {{{ ~cpp #include <stdio.h> #include <stdlib.h> #include <tchar.h> #include <Windows.h> #include <TlHelp32.h> void killProcess(TCHAR*); int _tmain(int argc, TCHAR *argv[]){ // kill process TCHAR *targetProcess = _T("NateOnMain.exe"); // ì¢…ë£Œí•˜ë ¤ëŠ” í”„ë¡œì„¸ìŠ¤ì˜ ì´ë¦„ì„ ì“´ë‹¤ killProcess(targetProcess); return 0; } // Works fine void killProcess(TCHAR *target){ HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe32; pe32.dwSize = sizeof(PROCESSENTRY32); HANDLE hProcess = NULL; do{ if(0 == _tcscmp(pe32.szExeFile, target)){ // get the process handle hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID); if(hProcess){ // kill it TerminateProcess(hProcess, -1); CloseHandle(hProcess); printf("종료 성공!"); break; } } }while(Process32Next(hProcessSnap, &pe32)); CloseHandle(hProcessSnap); } }}}