U E D R , A S I H C RSS

Ruby/2011년스터디/서지혜


1. 프로�트

  • ì�¼ì • 시간ì�´ 지나면 웹 브ë�¼ìš°ì €ë¥¼ 종료하는 프로그램 만들기
  • 0207 : 프로그램 명세. ì—”í�¬ì§€ì—� 프로ì �트 ìƒ�성(ì—”í�¬ì§€ ë§�í�¬)

2. 프로그램 기능

  • OSì—�게 현재 실행중ì�¸ 웹 브ë�¼ìš°ì €ì�˜ ì •ë³´(ì´� 실행 시간, 현재 뷰중ì�¸ 페ì�´ì§€)를 얻어 ì�¼ì •시간ì�´ìƒ� 실행ë�œ (í‹�ì • 사ì�´íŠ¸ë¥¼ ë·° 중ì�¸) 웹 브ë�¼ìš°ì € 종료시키기

3. 실행 순서

  • OSì—�게 웹 브ë�¼ìš°ì €ì�˜ ì •ë³´ ì–»ì�Œ
  • ì�¼ì •시간 ì�´ìƒ� 실행ë�œ 웹 브ë�¼ìš°ì € 검색 (혹ì�€ ì§�ì ‘ 카운트)
  • 특정 사ì�´íŠ¸ë¥¼ 뷰중ì�¸ì§€ 검색
  • 해당 브ë�¼ìš°ì €ì—�게 종료 메세지 보냄 (혹ì�€ 경고창ì�„ ë�„움)

4. 예� 예외사항

  • 웹 브ë�¼ìš°ì €ì�˜ 정보를 ì–»ì�„ 수 ì—†ì�„ 때
    • 실행중ì�¸ 웹 브ë�¼ìš°ì €ê°€ ì—†ì�„ 때
    • 프로세서간 통신 실패시
  • 웹 브ë�¼ìš°ì €ê°€ 종료ë�˜ì§€ 않ì�„ 때
    • 잘못ë�œ 웹 브ë�¼ìš°ì €ì�˜ 종료

5. 제약사항

  • 프로세스간ì�˜ 통신
    • 루비ì—�서ì�˜ 윈ë�„ìš°API사용

6. 예� 문제�

  • 루비와 윈ë�„ìš°APIì�˜ 호환성
  • 윈ë�„ìš°API 사용법 습ë“�

7. 추가 기술 사항

  • OS 부팅 시 ìž�ë�™ 실행
  • 웹 브ë�¼ìš°ì €ì�˜ 페ì�´ì§€ 뷰를 기ë¡�하여 통계
  • 멀티 탭 브ë�¼ìš°ì €ì�¼ 때 탭만 종료하기

8. 배운것

8.1. 2월 21�

  • 윈ë�„ìš° API 테스트
    • windows API로 프로세스ì�˜ ì •ë³´ 받아오기 (ì›�본)

~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;
}
  • 특정 프로세스 죽ì�´ê¸° (ì›�본)

~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);
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:56
Processing time 0.0079 sec