지난 며칠전에 Windows 환경에서 리눅스나 Unix에서 사용하는 kill 명령과 비슷한 프로그램으로 "taskkill"에 대해서 이야기하였다. 내가 "taskkill"에 대해서 찾아보게된 계기는 Visual Studio의 Debug Mode상에서 생성된 Process를 중단할 필요에 의해서 였는데, 실제로 해보고 결과를 이야기하기로 하였었다. (지난 글)


"Taskkill"을 이용해서 Visual Studio개 생성한 Process의 제거는 결론적으로 실패였다.


우선 Visual Studio의 실행을 중단하고, 

TASKKILL /IM myprogram.exe /F /T

을 실행하거나 또는


TASKKILL /PID 1004 /F /T


를 실행해 보았지만, "Access Denied" 메시지를 보이고, 중단을 원하던 Process는 그대로 남아 있었다.


그래서, 또하나의 방법으로 "Power Shell"에서 제공하는 "Stop-Process" Cmdlet을 이용해 보기로 하였다. "Power Shell"은 kill 이라는 Alias명으로 이미정의 정의되어져서 "Stop-Process" 대신 사용이 가능하다.

(Power Shell의 "Stop-Process" 참조 사이트 : Version 6기준)


Powershell을 실행하고, 콘솔창에서 다음과 같이 실행하여 보았다.

Stop-Process -Name "myprogram.exe"

그러나 역시나 "Access Denied" 메시리즐 보이면서 Process를 중단하는 것을 실패했다. (다른 옵션들도 주고 테스트했지만 실패했다.)



뭔가 강력한 어떤것이 필요하다고 생각이 들어서, 이리 저리 찾아보니, WMI를 이용하는 방법을 찾았다. 

이전에 알던 WMI의 사용법은 Windows시스템에 대한 정보들을 얻어오는 방법으로 이용을 하곤 하였는데, 좀 다른 방식의 사용법으로 Process를 Kill하는 방법도 제공하고 있었다.


WMI를 사용하여 Process를 제거하는 방법은 다음과 같다.

WMIC process where name='myprogram.exe' delete


결과적으로는 그토록 중단시키려고 했던, 좀비 프로그램을 메모리에서 삭제해버리고야 말았다.


여러가지 방법들을 찾아서 실행하면서 이전에 모르던 많은 것들을 알게 되어서 나름 즐거웠다.

오랜만에 WMI를 살펴보니, Program 이름과 PID를 가져오는 방법도 제공하고 있는데, 좀 더 살펴보고 시간이 되면 정리해 봐야겠다.


공부할 것은 많다. 알게되는 것도 많지만, 잊어버리는 것도 그만큼 많은것 같다.


Posted by 행복상자

최근에는 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 행복상자

지난주 11월 7일에 다녀왔던 또 하나의 AI 컨퍼러스는 'Microsoft'에서 준비했다.

얼마전부터 AI에 대한 관심이 생기는 통에, 자연스럽게 Google, AWS, Microsoft에서 준비한 행사에 참석하에 되었다. 매주 사무실을 벋어나, 컨퍼런스에 간다고 하니, '또'라는 반응을 보이는데, 그래도 배우겠다고 하는데, 이런것이 다 회사에 도움이 되고 나에게도 도움이 되는 건데... 라고 속으로 생각하면서 신청을 하였다.


서울 홍제동쪽에 있는 '힐튼 그렌트 호텔'에서 오전 9시 부터 10시까지 참가 확인후에 행사장에 입장을 할수 있었는데, 지난 Google 행사와는 다른 점은 사전신청 확인도 하지만, 현장 신청도 진행하고 있었다는 것이다. 

그리고, 서울의 조금 외곽진 호텔이지만, 주차장을 무료를 이용할 수 있어서, 차를 가지고 간 나로서는 편했다. 


많은 사람들이 신청을 하는 모습을 뒤로하고, 3층으로 올라갔다.  여러가지 체험관과 부스들이 보인다.


아직 행사시작까지는 시간이 좀 남아서, 홀로렌즈 체험관에서 홀로렌즈를 시연해 보기로 하였다.

데모 동영상이나, youtube에서는 보기는 하였지만, 사용해 보는 것은 처음인데, 안경을 쓴 체로 실제 사물을 보면서 이용하는 부분은 좋았으나, 눈에 상을 맺히도록 맞추는 것은 위 아래로 조정을 몇 차례 하고나서야 가능한 부분은 향후 개선이 필요해 보인다. 사용은 마치 몇 해전에 유행했던, 3D TV를 시청하기 위해서 3D안경을 착공한것과 같이 홀로렌즈 고글을 사용하면, 이전에 보이지 않던 것들이 눈 앞에 나타난다. 


그리고, 눈앞에 나타난 화면을 손으로 조정할 수 있는 모션 인식기능은 앞에서 이야기한 단점을 만회할 만 하다.

 



행사장에 입장을 하였다. 행사장은  벌써 많은 사람들이 잎장해 있었다.



사실, 가장 이 행사에서 보고 싶은 것은 '사티아 나델라' 마이크로 소프트의 CEO의 키노트였다.

그리고, Microsoft에서 준비하고 있는 AI와 같이 하는 미래에 대한 비전을 보고 싶었다.





오전의 키노트에서는 AI로 모든 기업이 옮겨가게 되고, 이를 위해서 보안과 AI윤리에 대해서 '사티아 나데라' 마이크로소프트 CEO는 이야기 했다. (동영상 링크)


오후 세션은 실제 응용사례들과 어떻게 AI를 알고 사용해야 하는지에 대한 "기술세미나"와 제조, 금융등에서 비즈니스에 AI활용에 대해 설명하는 "비즈니스 세션"이 같이 열렸는데, 나는 "기술세미나"에 참석하였다.


오랜만에 뵙는 김영욱님의 입담으로 재미있게, 머신러닝에 대해서 알게 된 시간이었다.

이분이 오래전 대리일때 부터, 데모와 강의를 보곤 하였는데, 정말 오랜만에 뵙게 되니, 반가왔습니다.


이날 내가 머신러닝에 대해서 기억나는 것은 아래 3가지인데, 최근 다녀온 컨퍼런스에서 공통적인 내용 들인데, 앞으로 공부한 것들이 될것 같다. 

1. Jupyter Notebook

2. AutoML

3. Tensflow

3. Python


워낙 내가 이 분야에 문외한이다 보니, Jupyter을 머신러닝을 위해서 Amazon이 만들었다고(?) 착각을 하고 있다가,  오늘에서 아닌것을 알았다. 정말 공부해야 겠다.

Posted by 행복상자

지난 10월 25일에 코엑스에서 개최 되었던 Google Cloud Summit에 다녀왔다. 간만에 Blog를 정리하면서 다녀온 소감을 짦게나마 정리했다.


회사에서도 Google과의 협력에 대해서 자주 이야기도 나오고, Google에서 한국에서는 처음 열리는 Summit 행사라고 해서 꼭 참석하겠다는 의지를 가지고 이른 아침에 8시 15분경에 코엑스에 도착하였는데, 생각보다 많은 사람들이 벌써 참가 등록을 하고 있었다.  오랜만에 팀과의 코엑스 나들이어서 나를 기대를 가지고 참관에 동참하였는데, IT업게는 정발 좋다. 이곳 저곳에서 아는 얼굴들이 보인다. 이제 다들 나와 더불어서 나이가 적지 않은데도 열심이다. 



나는 보통 Summit 또는 세미나와 같은 행사에 참석하면, 가장 중요한 순서는 "키노트(keynote)"라고 생각한다.

가장 그 행사에 대해서 축약적이지만 확실한 비젼과 생각들에 대해서 이야기하고, 가장 중요한 발표자가 설명을 해주기 때문이다.


이날 발표하신 분들중에는 안면 있으신 분들이 몇분 계셨었는데, 반갑기도 하고 새로운 것에 대해 소개해 주는 모습을 보니, 새로운 회사에 잘 적응하고 있다라는 생각이 들었다.

 




이날 발표하신 분들중에는 안면 있으신 분들이 몇분 계셨었는데, 반갑기도 하고 새로운 것에 대해 소개해 주는 


구글의 인프라와 인터넷을 통한 글로벌한 인프라 환경에 대해서는 이전에 많이 이야기 들어왔던 것이라 사실 이날 기대를 품고 참석하게된 이유는 "AI"라는 시대의 도전앞에서 어떻게 걸어나가야 하는지에 대해, IT 거인들은 어떻게 준비하고 있는지 알고 싶어서였다. 아니, 이건 너무 거창하고 그냥 "AI", "머신러닝", "딥 러닝"에 대해서 알고 싶어서다.


일단, 머신러닝과 관련된 세션들만 들었는데, 알아야 할 것 들에 대한 리스트만 잔득 들었다.

아직도 잘 모르겠다. 아래는 살펴볼 리스트이다.

1. TenserFlow

2. AutoML

3. Jupyter Notebook

...

그리고, python과 R



    

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"으로 변경하니 괜찮아 보인다.


'Tip & Tips > VS Code Tip & Tips' 카테고리의 다른 글

Visual Studio Code : Shortcuts(단축키)  (0) 2018.12.03
Visual Studio Code의 Text Font 바꾸기  (0) 2018.11.11
Posted by 행복상자

아주 오래전(약 2년 6개월전)에 글을 쓰기는 했는데, 마무리 짓지 못했던 글인데, 요즘은 await과 async 키워드를 통해서 자연스럽게 사용하고 있어서 필요가 없을 수 있다. 이전에 내부에 Timer와 간단한  Queue를 만들어서  batch 작업을 수행하는데 사용했었다. 


(Async와 Awat 키워드를 사용하거나, Promise를 이용해서 제어하는 것이 아래 방식보다는 훌륭하다.)


Node Js를 이용하여, 개발할 경우에 싱글 쓰레드가 하나의 CPU Core에서도 자연스럽고 부드럽고 너무도 가볍게 동작하는 것을 보고 놀랐었다.

I/O에 대한 Blocking 문제를 자체적으로 처리해주는 똘똘한 녀석이라고, 자랑스러워하였지만, Callback hell이라고 불리우는 지저분해지는 코드는 또다른 문제를 안겨주기도 한다. 


개인적으로는 시각적으로 가독성이 떨어지는 코드는 좋아 하지 않기 때문에, 머신의 성능이 보장해주는 한도에서 가능하면 가독성이 좋고, 이해하기 좋은 코드를 쓰는 것을 좋아한다.

그리고, 리펙토링을 꼭 해서 좀 더 중복을 없애고, 보기 좋은 짜임새 있도록 만들고는 혼자 좋아라 한다.


Node Js의 Callback 함수 호출은 굉장히 개발을 쉽게 해주기도 하지만, 중첩된 콜백과 이벤트 방식으로 인해 사용하기가 쉽지 않다. 오히려 UI가 있는 Visual Basic은 event호출에 의한 callback 함수가 UI 개발에 직관성을 높이고 코드를 분리해 줄수 있지만, 스크립트와 같은 순차적인 작업은 불편하기 짝이 없다.


이때문에 node Js에서는 Sync함수들을 별도로 제작해서 제공하고 있는 것으로 보인다.

(→ node의 file system과 관련된 라이브러리 참고: https://nodejs.org/api/fs.html)


아래는 개인적으로 이러한 환경에서 사용할 수 있는 non-sync 환경에서 Timer를 이용한 간단한 Queue 방식으로 실행할 수 있는 코드이다. 예를 들명 파일에서 라인별 데이터를 읽어 들이고, 이을 Mysql과 같은 DB에 쿼리를 실행하여 데이터를 저장하거나, 반대로 데이터를 읽고 이를 분석하는 기능을 동시에 실행할 경우에 이용할 수 있다. 


var count = 10;
var queue = [];

for(var i = 0; i < 3; i++)
{
    queue.push(i+5);
}

var tid = setInterval(function() {
    if(count == 0){
     if(queue.length > 0){
            console.log("queue: " + queue.length )
          count = queue.shift();
            return;
        }

        clearInterval(tid);
    }

console.log("count " + count--);
}, 1000);


Posted by 행복상자