달력

12

« 2024/12 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
2018. 11. 18. 22:00

Windows의 kill 명령어 사용(1): Taskkill Tip & Tips/Windows2018. 11. 18. 22:00

최근에는 Windows 환경에서 프로그래밍을 할일이 거의 없다. 아니 정확하게 말하면, 윈도우 프로그램을 개발할 일이 없다.

개인적으로 어렸을때부터 쉽게 접했던 환경이었지만, 요즘은 Android나 iOS 환경에서 App을 개발하는 사람은 쉽게 찾아볼수 있으나, Windows 환경에서 WinForm기반의 .Net으로 C#이나 VB.Net로 개발하는 사람을 찾기 힘들다.


지난주부터 이전에 개인적으로 만들던 툴을 Windows 버전으로 만들 생각을 가지고, Visual Studio 2017을 이용해서 개발과 Debug를 하고 있는데, 가끔씩 Debug mode로 생성한 파일들이 메모리상에 그대로 떠 있어서, 다시 빌드 후에 실행이 되지 않는 상황이 반복되고 있어서, 인터넷을 검색하다 보니, "Taskkill"이라는 프로그램을 발견하게 되었다.


이 프로그램은 Microsoft에서 제공하는 것으로 Unix나 Linux에서 사용하는 'kill' 명령어와 같은 기능을 수행한다고 생각하면 된다.


Wikipedia에써는 다음과 같이 설명을하고 있다. 

   - https://en.wikipedia.org/wiki/Kill_(command)#Microsoft_Windows

간략하게 이야기 한다면, 

kill명령과 비슷한 MS의 명령으로는 "Stop-Process"라는 Cmdlet이 있는데, 이를  kill 이라는 이름으로 alias 해서 사용하고 있다. (마치 kill 처럼 사용한다.)

그리고, taskkill 이라는 프로그램이 있다. (Wiondows 어느 버전인지는 모르지만, Windows XP부터 지원되고 있는 것으로 보인다.)

 

사용법은 간단하다. DOS창에서  "taskkill /?" 을 타이핑하고 실행하면, 도움말이 아래와 같이 나타날 것이다.


Microsoft Windows [Version 10.0.17134.285]

(c) 2018 Microsoft Corporation. All rights reserved.


C:\Users\hazppyzoo>taskkill /?


TASKKILL [/S system [/U username [/P [password]]]]

         { [/FI filter] [/PID processid | /IM imagename] } [/T] [/F]


Description:

    This tool is used to terminate tasks by process id (PID) or image name.


Parameter List:

    /S    system           Specifies the remote system to connect to.


    /U    [domain\]user    Specifies the user context under which the

                           command should execute.


    /P    [password]       Specifies the password for the given user

                           context. Prompts for input if omitted.


    /FI   filter           Applies a filter to select a set of tasks.

                           Allows "*" to be used. ex. imagename eq acme*


    /PID  processid        Specifies the PID of the process to be terminated.

                           Use TaskList to get the PID.


    /IM   imagename        Specifies the image name of the process

                           to be terminated. Wildcard '*' can be used

                           to specify all tasks or image names.


    /T                     Terminates the specified process and any

                           child processes which were started by it.


    /F                     Specifies to forcefully terminate the process(es).


    /?                     Displays this help message.


Filters:

    Filter Name   Valid Operators           Valid Value(s)

    -----------   ---------------           -------------------------

    STATUS        eq, ne                    RUNNING |

                                            NOT RESPONDING | UNKNOWN

    IMAGENAME     eq, ne                    Image name

    PID           eq, ne, gt, lt, ge, le    PID value

    SESSION       eq, ne, gt, lt, ge, le    Session number.

    CPUTIME       eq, ne, gt, lt, ge, le    CPU time in the format

                                            of hh:mm:ss.

                                            hh - hours,

                                            mm - minutes, ss - seconds

    MEMUSAGE      eq, ne, gt, lt, ge, le    Memory usage in KB

    USERNAME      eq, ne                    User name in [domain\]user

                                            format

    MODULES       eq, ne                    DLL name

    SERVICES      eq, ne                    Service name

    WINDOWTITLE   eq, ne                    Window title


    NOTE

    ----

    1) Wildcard '*' for /IM switch is accepted only when a filter is applied.

    2) Termination of remote processes will always be done forcefully (/F).

    3) "WINDOWTITLE" and "STATUS" filters are not considered when a remote

       machine is specified.


Examples:

    TASKKILL /IM notepad.exe

    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T

    TASKKILL /F /IM cmd.exe /T

    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"

    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe

    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *

    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"


대략적인 사용법은 아래의 "Examples"를 보면 이해가 쉽다.

명령어를 보면 "/M" 다음에 "imagename"를 넣게 되어 있는데, 프로그램 file명을 넣어 주면 된다.


TASKKILL /IM notepad.exe


PID를 가져오는 방법은 몇가지가 있는데, "작업관리자"를 실행해서 보는 방법과 "Powershell"를 이용하여 process의 PID를 가져오는 방법등이 있다.


이외에도 Windows에서 제공하는 "tasklist.exe"를 이용해서 가져오는 방법을 사용할 수도 있다.

나는 "tesklist.exe"를 이용하였는데, sygwin 설치하면 설치된 "grep"을 이용해서 가져왔다.

아래와 같이 "/T"옵션을 주게되면, 자식 프로세스도 같이 정리하는 기능을 사용하게 된다. 


TASKKILL /PID 6224 /PID 4716 /T


그리고, "/F" 옵션을 같이 사용하면 강제적으로 프로그램을 중단시키게 된다.



근데, 내가 위에서 이야기한 Debug mode실행시에 올라왔던 Process는 어떻게 되었을까?

결론적으로 아직 죽이지 못하고 있다. "/F" 옵션을 주었으나, 권한이 없다고 하면서 실패하고 있는 상황이다. 


그래서, 이제는 PowerShell에 있는 Stop-Process나 kill 명령을 이용하여 좀비 프로세스를 중단시켜 보려고 한다. 좀 정리가 되면, 이에 대해서는 다시 업데이트 할 예정이다.



[업데이트]

taskkill로 제거하지 못했던 process는 "wmic"에서 제공하는 기능을 이용해서 메모리에서 kill할 수 있는데, 가장 강력한 Windows에서 Process죽이기를 제공한다.

이에 대한 글은 "Windows의 kill 명령어 사용(2): Stop-Process and wmic"에 정리하였다.



:
Posted by 행복상자

Visual Studio Code를 사용한지 벌써 3년은 된것 같다.  이전에 남겨 놓았던 글을 보니 정식 1.0 버전이 2016년 4월 14일에 발표 되었다. 지금도 일하면서 여러가지 IDE를 사용하기는 하지만, 가볍기 때문에 가장 많이 사용하고 있는 IDE 이다. 


내가 사용하는 IDE는 "Visual Study Code", "Visual Study 2017", "IntelliJ" 그리고 "Ultra Editor"의 순으로 사용하고 있다.


가장 손에 익은 툴에 맞어서서 셋팅을 변경해서 사용하는데, 단축키는 Eclipse에 맞추어서 사용하고 있다. Eclipse와 Spring Tool Suits를 오래동안 사용해서 단축키는 Eclipse  편하다. 그리고, VS Code를 만들고 있는 에릭 감마는 마이크로 소프트로 옮기기 전에 Eclipse를 설계/개발 하였기 때문에 VS Code도 기본 키셋팅은 영향을 받은 듯 많이 유사하다.


가끔 사용하는 Ultra Editor은 VS Code가 대용량 파일을 잘 읽어내지 못 할 때에 사용

하고 있다.


집에서다 VS Code를 깔아서 사용하고 있는데, 보통 내가 사용하는 IDE의 폰트는 'Courier New'로 설정해서 사용하고 있는데, iMac에서만 기본 폰트로 사용중이어서, 오늘은 변경해 보기로 했다.


기본 설정 폰트는 다음과 같은 순서로 변경하면 되는데, Mac에서 변경하기 때문에 Mac의 메뉴 기준으로 설명하겠다.



1. Code의 메뉴에서 아래와 같이 설정 메뉴로 이동한다.

 


2. 아래와 같은 화면이 나타나게 되는데, 상단의



여기에서 "font"라고 입력한다.



3. 아래의 화면에서 텍스트 편집기를 선택하면, 오른쪽에 "Editor: Font Family"라고 화면이 나오는데, 

   아래와 같이 4개의 Font들의 리스트를 볼수 있을 것이다.



4. 여기서 "Courier New"을 아래와 같이 앞으로 옮겨 오게 되면, 바로 변경됨을 확인할 수 있다. 
   (
"Courier New"만 남기도 다른 3개의 폰트를 지워도 된다.  없을 경우에 있는 폰트를 사용하도록 순서를 지정하는 것이기 때문에, 필요에 맞추어서 설정하면 된다.) 


5. 지금은 설정을 보면서 바꾸었는데, 이전 방식처럼, User Setting 설정은 다음과 같이 가능하다.

    아래와 같이 오른쪽의 "..."으로 되어 있는 버튼을 누루고, "Open settings.json" 를 선택하면 된다.



6. 그러면, 아래와 같이 json 파일이 열리고 Editor상에서 변경이 가능하다.


변경을 해 놓고 보니, 너무 가늘어 보이는데, "bold"로 변경하고 폰트 크기도 "12"에서 "13"으로 변경하니 괜찮아 보인다.


:
Posted by 행복상자
2017. 1. 30. 19:29

Gradle에서 Proxy 설정 Tip & Tips/Eclipse Tip & Tips2017. 1. 30. 19:29

최근에는 Build환경을 구성하기 위해 Maven 보다 Gladle을 많이들 사용하고 있다.

신규 프로젝트의 기본 Frame을 만들고 팀원들간에 Java 프로젝트의 뼈대와 빌드환경을 구성하기에 수월하기 때문이다.


사용하고 있는 IDE에서, 나의 경우는 Eclipse를 사용하고 있는데, 정상적으로 Build가 되지 않았다.

로그를 확인하니 문제는 필드를 위해 필요한 Package를 정상적으로 받지 못해서 발생한 것인데, 회사의 보안 정책으로 외부의 Package Repository 서버에 접속이 안되기 때문이다.


Gradle에서 이를 해결하기 위해서는 다음과 같이 3가지 방식을 통해서 HTTP Proxy 설정이 가능하다.

1) from gradle.properties in project build dir.  

    프로젝트의 빌드환경에서 "./gradle.properties"를 통한 설정 

2) from gradle.properties in gradle user home.  

    사용자 홈디렉토리 환경의  "$HOME/.gradle/gradle.properties"를 통한 설정

3) from system properties, e.g. when -Dsome.property is set on the command line. 

   명령행에서 "-Dsome.property" 설정을 통한 설정


예를 들어 설명할 방식은 "gradle.properties" 상에서 설정하는 방식이다 (위 1번과 2번)

아래는 HTTP Proxy 설정에 대한 예이다.

systemProp.http.proxyHost=www.somehost.org
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=userid
systemProp.http.proxyPassword=password
systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost


HTTPS상에서는 아래와 같이 설정해 주면 된다.

systemProp.https.proxyHost=www.somehost.org
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=userid
systemProp.https.proxyPassword=password
systemProp.https.nonProxyHosts=*.nonproxyrepos.com|localhost


한가지 주의할 점은 "www.somehost.org"와 같이 URL을 넣어야 하는데, "http://www.somehost.org"와 같은 형태로 넣어주면, 정상적인 결과를 얻을수 없는 점만 주의 해야 한다. 또는 IP address를 직접 넣어 주는 것이 확인하기도 수월할 것이다.

 

Proxy 설정하는 방식이 툴에 따라 다르기 때문에 주의가 필요하기 때문이다. 

보통 linux의 셀 환경에서는 "http://www.somehost.org:8080"의 형태로 프로토콜을 pre-fix로 넣어주지만,

툴과 환경에서 요구하는 방식은 다르다는 점에 대해서 주의해야 한다. 


이에대한 자세한 내용은 아래의 링크를 참고하면 도움이 될 것이다.

  https://docs.gradle.org/current/userguide/build_environment.html




:
Posted by 행복상자
2011. 11. 12. 17:09

Eclipse에 Vim Plugin 설치하기 Tip & Tips/Eclipse Tip & Tips2011. 11. 12. 17:09

오늘 갑자기 10년전에 리눅스에서 개발하면서 사용했던 Vi 에디터가 생각이 나서 몇가지 자료와 웹사이트를 두루 돌아 다녔다.

Eclipse용은 특별히 강추하는 글들이 없어서, 하나씩 설치해 봐야할 것 같은데, 하필 처음 설치한 것이 유료 버전이어서, 무시 무시한 팝업창에 놀라곤 한다. 그러나 가벼우서 나쁘지는 않다는 것이 나의 첫인상이다.

아래는 오늘 다녀왔던, 그리고 설치한 vim에 대한 링크아 정보 요약이다.


1.     Vim 설치하기

·         Vim 사이트: http://www.vim.org

·         Vim 다운로드: http://www.vim.org/download.php

o    OS Version 별로 download 가능함

o    필요한 버전을 다운해서 설치 가능함

·         Vim User Manual: http://www.vim.org/docs.php

o    다양한 형태의 매뉴얼과 문서가 있음.

o    Vim 5.7을 위한 pdf 매뉴얼은 아래 링크에서 다운로드 가능하나, 추천하지 않음)

·         : ftp://ftp.vim.org/pub/vim/doc/book/vimbook-OPL.pdf

o    아래 사이트는 한번 볼만함: wiki book

·         http://www.swaroopch.com/notes/Vim_en:Table_of_Contents

o    기타 다른 문서는 시간 나는 대로 참조

·         PC버전 설치

o    Windows 버전과 Console 버전이 있음.

o    내가 설치한 것은 Console 버전과 Visual Studio로 제작된 버전

사용하는 큰 문제 없음

o    설치버전을 받지 않고, 압축파일로 묶인 버전 설치

PC에 흔적을 남기기 싫음.

2.     Eclipse Vim Plugin  설치

·         Viable 1.31.10 : http://viableplugin.com/

o    Eclipse.org에서 검색해서 찾음

·         설치 방법: Eclipse에서 아래와 같이 메뉴에서 추가한다.

o    Help > Install New Software > Add > http://viableplugin.com/update_site

·         설치를 하게 되면, 3가지 기본 모듈이 설치가 됨

o    Viable core plugin

o    Viable CDT feature

o    Viable JDT Feature

·         다큐멘트:

o     http://viableplugin.com/documentation/HomePage

·         Eclipse Vim : http://juan.boxfi.com/vim-color-schemes/#eclipse

o    다운하기: http://juan.boxfi.com/wp-content/uploads/2011/03/eclipse.vim_.gz

 

·         간단 사용

o 생각보다 가볍고 잘 동작한다. 명령이나 이에 대한 실행에 대한 분석은 시간이 필요함.

·         유의 사항

o 유료버전으로 라이선스 파일이 정상 설치하지 않으면, 당신을 죽일지도 모른다는
무시 무시한 메시지 창을 5분마다 띄우니 유의 할 것


 

:
Posted by 행복상자