※ Windows 에서 grep 을 이용해서 필터링된 프로세스 모두 닫기
1. 습관적으로 notepad에 기록하는 임시메모로 10개 이상의 notepad.exe 프로세스
- 내용이 있는 프로세스는 작업표시줄의 [모두닫기] 를 이용해도 저장여부를 확인해야되는 불편함
2. 별도세션으로 띄워야 되기에 ctrl+click 으로 띄워서 10개가 넘어가는 Internet Explorer
- 탭은 하위프로세스로 떠서 pstools의 Process Explorer 의
[Kill Process Tree] 를 사용하면 되는데 별도 프로세스는
각 상위트리의 프로세스별로 종료해야됨
- 듀얼모니터 사용으로 taskbar 확장프로그램을 이용중이라 작업표시줄
의 [모두닫기] 를 사용도 불편(확장 태스크바 에서는 [모두닫기] 안됨)
3. Pstool의 pskill 을 사용하면 1, 2가 어느정도 해결되나 약간의 불편한
- 1은 pskill notepad, 2의 경우는 pskill iexplore 로 종료가능
- IE의 경우 프로그램명은 Internet Explorer 인데 프로세스명은
iexplore.exe <= iexplorer 로 해야지 왜 젤 뒤에 r 을 빼놓는지.. -_-
- 여튼 다 치기도 귀찮고 이 위의 이유로 은근히 헷갈림
결론 grep을 이용해서 pskill iex 정도로 종료하면 편할듯 함
사용한 툴
GnuWin32 : Win32 환경에서 GNU 의 라이브러리들을 사용할수 있게 해줌
- 사용명령어 : grep, awk, uniq,xargs
- http://www.gnuwin32.sourceforge.net/
PsTools : Sysinternals(현재는 M$에 인수) 에서 제작한 시스템 관리툴킷
- 사용프로그램 : pslist, pskill
- http://technet.microsoft.com/ko-kr/sysinternals
우선 간단한 배치프로그램 제작해서 사용하고 추가적인 문제점은 보완 예정
OS : Windows 7 32bit
Bat 명 : gkill.bat
@echo off
REM
REM [Group Process Kill]
REM 파일명 : gpkill.bat v1.0
REM 작성일 : 2011.11.24
REM 작성자 : INUX
REM Description : Process Name의 패턴 문자열을 받아서 해당 프로세스를 모두 종료한다.
REM : notepad++ 과, Evernote 는 개인적 필요로 예외처리
REM 의존패키지 : GnuWin32 - grep, awk, uniq, xargs
REM : PsTools - pslist, pskill
echo #
echo # usage : gkill [패턴문자열]
echo #
if "%1" == "" (
echo.
echo gpkill: 종료할 Process의 패턴문자열을 입력하세요.
) else (
pslist | grep %1 |awk "{print $1}" |grep -v notepad++ |grep -v Evernote |uniq |xargs -n1 pskill
) |
- 순서
1. 프로세스 목록에 대해 grep 으로 필터링
2. awk로 필터링된 프로세스에 대해 pid 추출
3. xargs로 pskill 에 각 pid 인자 전달
사용중 ISUUE 사항
1. JSP 에디터로 notepad++ 을 사용중인데 gkill note 정도로 사용하면 두 프로세스가 동시 종료됨
- 추가 : evernote.exe도 동일케이스 note 가 들어가는 프로세스가 생각보다 많다. 조심해서 사용해야될듯
- 우선 옵션에 |grep -v notepad++ |grep -v Evernote 를 추가해서 사용 : 조금 더 생각 해봐야될듯
2. 프로세스 종료 메시지가 많이 나옴
- ie 프로세스가 10개일 경우 pskill iexplore 사용시 출력메시지
PsKill v1.13 - Terminates processes on local or remote systems
Copyright (C) 1999-2009 Mark Russinovich
Sysinternals - www.sysinternals.com
10 processes named iexplore killed. |
- gkill ie 사용시는 각 프로세스별 pid로 종료하는 방식이라 위 메시지가 각각 1회씩 총 10번 출력됨
: sort 등을 이용해서 pid가 아닌 process name 으로 종료하는 방식으로 수정 해봐야될 필요성이 있음 - (반영)
3. grep 으로 필터링된 프로세스가 없을경우
C:\>gpkill test
#
# usage : gkill [패턴문자열]
#
pslist v1.29 - Sysinternals PsList
Copyright (C) 2000-2009 Mark Russinovich
Sysinternals
PsKill v1.13 - Terminates processes on local or remote systems
Copyright (C) 1999-2009 Mark Russinovich
Sysinternals - www.sysinternals.com
Usage: pskill [-t] [\\computer [-u username [-p password]]] <process ID | name>
-t Kill the process and its descendants.
-u Specifies optional user name for login to
remote computer.
-p Specifies optional password for user name. If you omit this
you will be prompted to enter a hidden password.
xargs: pskill |
- pskill 에 전달된 인자가 없어서 pskill 의 Usage 메시지가 출력됨 : 보기가 좀 안좋음
- wc -l 로 grep 으로 필터링된 프로세스의 수를 확인해서 메시지를 출력하고자 했으나 화면 출력을 배치파일의 변수로 할당하는데서 문제 발생으로 미결
4. 패턴문자열의 대소문자 구분 제거
- 윈도우에서 사용하므로 대소문자 구분 필요성 없음
ex) TOTALCMD 종료시 gpkill TOTAL 처럼 대소문자 변경시 불편함
@echo off
REM
REM [Group Process Kill]
REM 파일명 : gpkill.bat v1.1
REM 작성일 : 2011.11.24
REM 작성자 : INUX
REM Description : Process Name의 패턴 문자열을 받아서 해당 프로세스를 모두 종료한다.
REM : notepad++ 과, Evernote 는 개인적 필요로 예외처리
REM 의존패키지 : GnuWin32 - grep, awk, uniq, xargs
REM : PsTools - pslist, pskill
REM********************************************************************************
REM 작성일 버전 변경내역
REM********************************************************************************
REM 2011.11.24 1.0 최초작성
REM 2011.11.30 1.1 패턴 문자열 대소문자 구분안함으로 변경
echo #
echo # usage : gpkill [패턴문자열]
echo #
if "%1" == "" (
echo gpkill: 종료할 Process의 패턴문자열을 입력하세요.
) else (
pslist | grep -i %1 |awk "{print $1}" |grep -v notepad++ |grep -v Evernote |uniq |xargs -n1 pskill
) |