화면이 끊겼다고 작업도 끝난 걸까? 프로세스와 로그를 따로 보세요|PowerShell 백그라운드 실행·작업 로그 저장·창 닫혀도 계속
PowerShell 백그라운드 실행은 로컬 Windows에서 Start-Process로 별도 프로세스를 만들면 시작한 셸과 독립적으로 남을 수 있어요. 다만 창이 사라진 사실만으로 성공이나 실패를 판단할 수 없으므로 PID와 표준출력·오류 로그를 함께 확인해야 하며, 원격 PowerShell 세션은 예외입니다.
긴 작업을 다시 실행하면 같은 파일을 중복 처리하거나 API 호출과 작업 시간이 더 들 수 있으므로, 재실행 전에 기존 프로세스와 로그부터 구분해야 한다.
읽기 전에 확인할 근거
PowerShell 백그라운드 실행은 로컬 Windows에서 Start-Process로 별도 프로세스를 만들면 시작한 셸과 독립적으로 남을 수 있어요. 다만 창이 사라진 사실만으로 성공이나 실패를 판단할 수 없으므로 PID와 표준출력·오류 로그를 함께 확인해야 하며, 원격 PowerShell 세션은 예외입니다.
Start-Process는 PowerShell에 포함된 명령이라 별도 유료 도구를 고르는 문제는 아니에요. 여기서 줄일 수 있는 비용은 같은 자동화를 실수로 다시 돌리면서 생기는 처리 시간, 중복 파일, API 호출량에 가깝습니다.
창이 닫혀도 남는 것은 로컬의 별도 프로세스예요
Microsoft Learn의 현행 설명에 따르면 로컬 시스템에서 Start-Process로 시작한 프로세스는 호출한 프로세스와 독립적으로 실행될 수 있어요. 기본 동작도 비동기 방식이라 새 프로세스가 일하는 동안 원래 PowerShell에는 바로 제어가 돌아옵니다.
쉽게 말해 PowerShell 창은 작업 현장을 바라보는 창문이고, 별도 프로세스는 안에서 일하는 작업자예요. 창문을 닫았다고 작업자가 반드시 사라지는 것은 아닙니다.
- 명령 입력 화면이 닫힘: 화면 상태예요.
- PID가 조회됨: 해당 프로세스가 현재 남아 있다는 증거예요.
- PID가 조회되지 않음: 현재 실행 중이 아니라는 뜻이지만 정상 완료인지는 아직 몰라요.
- 완료 문구나 오류가 로그에 남음: 작업의 실제 결말을 판단할 근거예요.
중요한 예외가 있어요. Microsoft는 원격 시스템에서 Start-Process로 만든 새 프로세스가 원격 세션 종료와 함께 끝날 수 있다고 안내합니다. WinRM 같은 원격 PowerShell 접속이 끊긴 뒤에도 무조건 남는다고 기대하면 안 돼요. -Wait는 호출한 쪽이 프로세스 트리가 끝날 때까지 기다리게 하는 옵션이지, 끊어진 원격 연결을 영구 작업으로 바꾸는 장치는 아닙니다.
시작할 때 PID와 두 로그를 함께 남기세요
긴 작업을 시작할 때는 프로세스 번호 하나와 기록 파일 두 개를 같은 폴더에 남기는 편이 안전해요. 정상 메시지는 표준출력 로그로, 실패 메시지는 표준오류 로그로 보내면 화면이 없어져도 나중에 읽을 수 있습니다.
아래 예시는 C:\Automation\run.ps1을 별도 PowerShell 프로세스로 시작하는 구성입니다. 실제 스크립트 경로와 로그 폴더는 자신의 PC에 맞게 바꿔야 해요.
$logDir = "C:\Automation\logs"
New-Item -ItemType Directory -Path $logDir -Force
$stamp = Get-Date -Format "yyyyMMdd-HHmmss"
$outLog = Join-Path $logDir "run-$stamp.out.log"
$errLog = Join-Path $logDir "run-$stamp.err.log"
$pidFile = Join-Path $logDir "run-$stamp.pid"
$process = Start-Process -FilePath "pwsh.exe" -ArgumentList '-NoProfile -File "C:\Automation\run.ps1"' -WorkingDirectory "C:\Automation" -RedirectStandardOutput $outLog -RedirectStandardError $errLog -PassThru
$process.Id | Set-Content -Path $pidFile
여기서 -PassThru는 시작한 프로세스 정보를 돌려받게 해요. 그중 Id를 파일에 저장하면 다시 접속했을 때 어느 프로세스를 찾아야 하는지 알 수 있습니다. -RedirectStandardOutput과 -RedirectStandardError는 각각 정상 출력과 오류 출력을 지정한 파일로 보냅니다.
작업 자체에도 시작 시각, 주요 처리 단계, 완료 문구를 남기는 편이 좋아요. 로그 파일이 만들어졌다는 사실만으로는 자동화가 끝까지 실행됐다고 볼 수 없기 때문입니다.
다시 접속했다면 프로세스부터 찾으세요
저장한 PID를 읽어 Get-Process로 조회하면 현재 실행 중인지 먼저 확인할 수 있어요. 조회가 되면 프로세스는 살아 있고, 조회되지 않으면 이미 끝났거나 중간에 종료된 상태입니다.
$savedPid = Get-Content "C:\Automation\logs\run-실행시각.pid"
Get-Process -Id $savedPid -ErrorAction SilentlyContinue
결과가 보인다면 같은 자동화를 다시 실행하지 말고 로그의 마지막 부분을 확인하세요. 작업이 오래 걸리는 중일 수 있는데 새 프로세스를 하나 더 띄우면 같은 파일을 두 번 처리하거나 같은 요청을 중복 전송할 수 있습니다.
결과가 없더라도 곧바로 “성공했다”고 판단하면 안 돼요. PID 조회는 지금 살아 있는지만 알려줍니다. 정상 완료, 오류 종료, 강제 종료 가운데 무엇이었는지는 로그가 맡는 영역이에요.
PID는 운영체제에서 나중에 다시 사용될 수도 있어요. 오래 지난 PID 파일이라면 프로세스 이름과 시작 시각도 함께 살펴보고, 무관한 새 프로세스를 기존 작업으로 오해하지 않도록 주의하세요.
프로세스가 없으면 두 로그로 결말을 찾으세요
프로세스가 끝난 뒤에는 출력 로그와 오류 로그의 마지막 부분을 함께 봐야 해요. 출력 로그에 마지막 처리 항목과 완료 문구가 있고 오류 로그가 비어 있다면 정상 완료 가능성을 확인할 수 있습니다.
Get-Content "C:\Automation\logs\run-실행시각.out.log" -Tail 50
Get-Content "C:\Automation\logs\run-실행시각.err.log" -Tail 50
- 출력 로그가 계속 늘어남: 프로세스가 아직 처리 중일 가능성이 있어요.
- 출력 로그에 완료 문구가 있음: 작업이 계획한 마지막 단계까지 갔는지 확인할 근거가 됩니다.
- 오류 로그에 경로·권한·네트워크 오류가 있음: 실패 지점부터 수정해야 해요.
- 두 로그가 갑자기 끊김: 강제 종료, PC 종료, 스크립트 내부 기록 누락 가능성을 따로 확인해야 합니다.
표준오류 파일이 비었다고 모든 결과가 성공인 것도 아니에요. 실행한 프로그램이 오류를 표준출력에 쓰거나 자체 로그만 남길 수 있습니다. 자동화 스크립트가 실패 시 종료 코드와 실패 단계, 성공 시 명확한 완료 문구를 남기도록 구성하면 다음 판단이 훨씬 쉬워져요.
재실행 전에 이 네 가지를 확인하세요
긴 작업이 사라진 것처럼 보여도 바로 다시 누르지 마세요. 실행 환경과 남은 흔적을 다음 순서로 보면 중복 처리 위험을 줄일 수 있습니다.
- 이번 작업이 로컬 Windows에서 Start-Process로 시작됐는지 확인해요.
- 저장한 PID가 현재 조회되는지 살펴봐요.
- 표준출력 로그의 마지막 처리 항목과 완료 문구를 읽어요.
- 표준오류 로그에서 권한, 경로, 네트워크 같은 실패 흔적을 확인해요.
PC를 재부팅한 뒤에도 자동으로 다시 시작되어야 하거나 사용자가 로그아웃해도 상시 실행되어야 한다면 Start-Process만으로 해결할 문제는 아니에요. 그 경우에는 실행 계정과 시작 조건을 명시할 수 있는 Windows 작업 스케줄러나 서비스 방식을 검토하는 편이 맞습니다.
이 안내는 Microsoft 공식 문서의 Start-Process 동작과 매개변수를 쉬운 말로 옮긴 것이며, 특정 자동화 프로그램을 실제로 장시간 실행해 완주를 확인한 사용 후기는 아닙니다. 확인 기준일은 2026년 8월 28일이고, 로컬 독립 실행·비동기 동작·PID 반환·출력 및 오류 리디렉션·원격 세션 예외를 대조했습니다.
공식 출처
Microsoft Learn Start-Process 공식 문서
Microsoft Learn RedirectStandardOutput 설명
Microsoft Learn RedirectStandardError 설명
함께 보면 좋은 글
댓글
댓글 쓰기
질문은 자유롭게 남겨주세요. 광고성 댓글, 비방, 개인정보가 포함된 댓글은 삭제될 수 있습니다.