컴퓨터/Batch

Batch (2) - 특정 프로세스를 모니터링 하여 계속 실행해주는 배치파일을 제작하자

달서비 2023. 1. 25. 00:24

배치파일을 이용하여 실행 중인 프로세스를 확인하고 안 되는 경우 실행하는 배치파일을 만들어보겠습니다.

※ 모든 예시 및 소스코드의 프로세스 대상은 "steam.exe" 으로 정하였습니다.

CMD - pngwing

프로세스 관련한 명령어

※위의 명령어는 지극히 일부 기술하였습니다.

tasklist

tasklist 명령을 실행할 때 화면

tasklist는 실행 중인 프로세스를 확인하는명령어 입니다. 아래에 표시되는 리스트는 현재 컴퓨터에 실행하고 있는 프로세스입니다. 여기서 하나만 뽑고 싶은 경우에는 아래의 명령어로 검색하면 됩니다.

tasklist | findstr "steam.exe"

 해당 명령어는 tasklist에 실행하고 있는 사항 중 "steam.exe"를 찾으라는 명령어입니다.

위의 명령어를 입력할 때 화면

이것을 통하여 우리가 원하는 프로세스를 발견할 수 있습니다.

 

taskkill

현재 하는 프로젝트에서는 사용하지 않지만, 프로세스를 다룰 때 필수적인 명령어라서 적었습니다.

taskkill /f /im "steam.exe"

taskkill /f /im "steam.exe"

taskkill은 현재 실행하고 있는 프로세스를 종료하는 명령어입니다. 위의 명령어를 통하여 steam.exe를 종료할 수 있습니다.  사용된 인자의 설명은 아래와 같습니다.

  • /f : 강제 종료를 한다는 인자입니다. 사용하지 않는 경우에 '종료하시겠습니까?' 안내가 나옵니다.
  • /im : 이미지로 정하는 인자입니다. 프로세스 이름으로 검색할 때 사용합니다.

 

특정 프로세스를 모니터링 하여 계속 실행해주는 배치파일을 제작하자

특정 프로세스를 모니터링 하여 계속 실행해주는 배치파일을 제작해보겠습니다.

실행하기 전 간단하게 실행순서 정리하면 다음과 같습니다.

1. 기본 설정을 구성한다
2. 루프에 들어간다
3. tasklist 명령어의 결과를 변수에 넣는다.
4. proc 변수의 값을 NULL로 초기화한다
5. tasklist의 결과가 있는 경우 proc 변수의 값은 NOT이 된다
6-1. tasklist의 값이 안넣어진 경우 프로세스를 실행시킨다. (NULL)
6-2. tasklist의 값이 넣어진 경우 대기한다. (NOT)
7. 이상 2번부터 반복한다.

 

소스 코드

@echo off
chcp 65001
setlocal
cls

set /a checkTime=10
set process=steam

cd  C:/Program Files (x86)/Steam

:_loop 
	set proc=NULL
	tasklist | findstr %process% > %temp%\cmdtemp
	set /p proc=<%temp%\cmdtemp & del /q %temp%\cmdtemp

	IF NOT "%proc%" == "NULL" (
		set proc=NOT
	)

	IF "%proc%" == "NULL" (
		echo 프로세스 종료 및 재시작 [%date% %time%]
		start %process%
		timeout /t %checkTime%
	) ELSE (
		echo 프로세스 실행중 [%date% %time%]
		timeout /t %checkTime%
	)
goto _loop

 

여담으로 ()를 if문 중간에 넣어 디버깅 하는데 하루가 걸렸습니다 ㅠㅠ

어쨋든 해당 방법을 응용하여 프로세스확인후 계속 실행시키는 방식으로 구성하였습니다.