화면이 끊겼다고 작업도 끝난 걸까? 프로세스와 로그를 따로 보세요|PowerShell 백그라운드 실행·작업 로그 저장·창 닫혀도 계속

먼저 얻을 답

PowerShell 백그라운드 실행은 로컬 Windows에서 Start-Process로 별도 프로세스를 만들면 시작한 셸과 독립적으로 남을 수 있어요. 다만 창이 사라진 사실만으로 성공이나 실패를 판단할 수 없으므로 PID와 표준출력·오류 로그를 함께 확인해야 하며, 원격 PowerShell 세션은 예외입니다.

긴 작업을 다시 실행하면 같은 파일을 중복 처리하거나 API 호출과 작업 시간이 더 들 수 있으므로, 재실행 전에 기존 프로세스와 로그부터 구분해야 한다.

읽기 전에 확인할 근거

근거 1Microsoft Learn이 설명한 로컬 Start-Process의 독립 실행과 기본 비동기 동작
근거 2PassThru로 받은 프로세스 ID를 저장해 다시 조회하는 경로
근거 3RedirectStandardOutput과 RedirectStandardError로 정상 출력과 오류를 분리하는 경로
근거 4원격 세션 종료 시 새 프로세스도 종료될 수 있다는 공식 예외
PowerShell 창이 닫힌 뒤 PID와 출력·오류 로그로 자동화 상태를 확인하는 대표 장면

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와 두 로그를 함께 남기세요

프로세스 ID와 표준출력·오류 로그를 시작할 때 함께 저장하는 과정

긴 작업을 시작할 때는 프로세스 번호 하나와 기록 파일 두 개를 같은 폴더에 남기는 편이 안전해요. 정상 메시지는 표준출력 로그로, 실패 메시지는 표준오류 로그로 보내면 화면이 없어져도 나중에 읽을 수 있습니다.

아래 예시는 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로 자동화 프로세스의 현재 실행 상태를 확인하는 장면

저장한 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 종료, 스크립트 내부 기록 누락 가능성을 따로 확인해야 합니다.

표준오류 파일이 비었다고 모든 결과가 성공인 것도 아니에요. 실행한 프로그램이 오류를 표준출력에 쓰거나 자체 로그만 남길 수 있습니다. 자동화 스크립트가 실패 시 종료 코드와 실패 단계, 성공 시 명확한 완료 문구를 남기도록 구성하면 다음 판단이 훨씬 쉬워져요.

재실행 전에 이 네 가지를 확인하세요

긴 자동화를 재실행하기 전에 PID와 두 로그, 실행 환경을 확인하는 장면

긴 작업이 사라진 것처럼 보여도 바로 다시 누르지 마세요. 실행 환경과 남은 흔적을 다음 순서로 보면 중복 처리 위험을 줄일 수 있습니다.

  1. 이번 작업이 로컬 Windows에서 Start-Process로 시작됐는지 확인해요.
  2. 저장한 PID가 현재 조회되는지 살펴봐요.
  3. 표준출력 로그의 마지막 처리 항목과 완료 문구를 읽어요.
  4. 표준오류 로그에서 권한, 경로, 네트워크 같은 실패 흔적을 확인해요.

PC를 재부팅한 뒤에도 자동으로 다시 시작되어야 하거나 사용자가 로그아웃해도 상시 실행되어야 한다면 Start-Process만으로 해결할 문제는 아니에요. 그 경우에는 실행 계정과 시작 조건을 명시할 수 있는 Windows 작업 스케줄러나 서비스 방식을 검토하는 편이 맞습니다.

이 안내는 Microsoft 공식 문서의 Start-Process 동작과 매개변수를 쉬운 말로 옮긴 것이며, 특정 자동화 프로그램을 실제로 장시간 실행해 완주를 확인한 사용 후기는 아닙니다. 확인 기준일은 2026년 8월 28일이고, 로컬 독립 실행·비동기 동작·PID 반환·출력 및 오류 리디렉션·원격 세션 예외를 대조했습니다.

공식 출처

Microsoft Learn Start-Process 공식 문서

Microsoft Learn RedirectStandardOutput 설명

Microsoft Learn RedirectStandardError 설명

Microsoft Learn PassThru 설명

이 글이 필요한 경우긴 자동화를 실행한 뒤 PowerShell 창이나 접속 화면이 닫혀도 작업이 살아 있는지, 끝났다면 성공했는지 확인하기 어렵다.
이 방법이 맞지 않는 경우원격 연결 종료 뒤 지속 실행이나 PC 재부팅 뒤 자동 복구까지 필요한 작업

Microsoft Start-Process 현행 조건 확인하기

댓글

이 블로그의 인기 게시물

CSV 정리 자동화, 삭제 기능보다 감사 보고서를 먼저 만든 이유

뤼튼 무료 범위와 크랙 결제, 무료 AI와 유료 콘텐츠를 나눠 보세요

ChatGPT 대화 기록 삭제와 학습 제외, 임시채팅까지 따로 봐야 합니다