백그라운드 프로세스를 포킹/실행하기 위한 bash 앰퍼샌드(&)와 동등한 Powershell
bash에서는 앰퍼샌드(&)를 사용하여 백그라운드에서 명령을 실행하고 명령어 실행이 완료되기 전에 사용자에게 대화형 제어를 반환할 수 있습니다.Powershell에서도 이와 동등한 방법이 있나요?
bash에서의 사용 예:
sleep 30 &
명령어가 실행 가능 파일 또는 연결된 실행 가능 파일이 있는 경우 Start-Process(v2에서 사용 가능)를 사용합니다.
Start-Process -NoNewWindow ping google.com
이것을 프로파일에 함수로 추가할 수도 있습니다.
function bg() {Start-Process -NoNewWindow @args}
그러면 호출이 다음과 같이 됩니다.
bg ping google.com
백그라운드에서 프로세스를 실행하는 단순한 사용 사례에 대해 Start-Job은 오버킬이라고 생각합니다.
- 시작 작업은 별도의 세션에서 실행되므로 기존 범위에 액세스할 수 없습니다."Start-Job {notepad $myfile}"을(를) 수행할 수 없습니다.
- Start-Job은 (다른 세션에서 실행되므로) 현재 디렉토리를 유지하지 않습니다."Start-Job {notepad myfile"을 수행할 수 없습니다.txt}"를 선택합니다.txt는 현재 디렉토리에 있습니다.
- 출력은 자동으로 표시되지 않습니다.작업의 ID를 매개 변수로 사용하여 수신 작업을 실행해야 합니다.
메모: 초기 예시에 대해서는 sleep은 Powershell 명령어이므로 "bg sleep 30"은 작동하지 않습니다.시작-프로세스는 실제로 프로세스를 분기할 때만 작동합니다.
6.부터는 PowerShell Core 6.0을 쓸 수 .&
이는 현재 작업 디렉토리의 백그라운드에서 파이프라인을 실행하는 것과 같습니다.
하다와 .&
bash에서는 현재 PowerShell 작업 기능에 적합한 구문일 뿐입니다.작업에 사용할 다른 모든 명령을 사용할 수 있도록 작업 개체를 반환합니다.예를들면Receive-Job
:
C:\utils> ping google.com &
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
35 Job35 BackgroundJob Running True localhost Microsoft.PowerShell.M...
C:\utils> Receive-Job 35
Pinging google.com [172.217.16.14] with 32 bytes of data:
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=11ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Reply from 172.217.16.14: bytes=32 time=10ms TTL=55
Ping statistics for 172.217.16.14:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 11ms, Average = 10ms
C:\utils>
백그라운드에서 몇 가지 문을 실행하는 경우 다음과 같이 콜 연산자, 스크립트 블록 및 이 새로운 백그라운드 연산자를 결합할 수 있습니다.
& { cd .\SomeDir\; .\SomeLongRunningOperation.bat; cd ..; } &
다음은 설명서 페이지의 몇 가지 추가 정보입니다.
앰퍼샌드(&)를 사용한 파이프라인 백그라운드 지원(#3360)
「 」를 .
&
PowerShell 업업shell 。파이프라인이 백그라운드로 지정되면 작업 개체가 반환됩니다.되면, 스탠다드 「」가 됩니다.*-Job
할 수 .되는 변수변수 는됩니다.따라서 프로세스 고유 변수입니다.Copy-Item $foo $bar &
효과가 있습니다.작업은 사용자의 홈 디렉토리 대신 현재 디렉토리에서도 실행됩니다.PowerShell 작업에 대한 자세한 내용은 About_Jobs를 참조하십시오.
about_operators / Ampersand background 연산자 &:
앰퍼샌드 백그라운드 연산자 &
PowerShell 작 power power power power power power power power 。로 유명한 "operator"와 동일하게 합니다.ampersand background는 UNIX "ampersand"입니다. ampersand background와 많은 합니다.
Start-Job
다음 명령어에는 앰퍼샌드 백그라운드 연산자의 기본 사용법이 포함되어 있습니다.Get-Process -Name pwsh &
입니다.
Start-Job
.
Start-Job -ScriptBlock {Get-Process -Name pwsh}
사용법과
Start-Job
ampersand background "a"를 합니다.Job
꼭 object 객체Start-Job does
'아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아,Receive-Job
★★★★★★★★★★★★★★★★★」Remove-Job
만약 당신이 그것을 사용했다면 할 수 있었을 것이다.Start-Job
작업을 시작합니다.$job = Get-Process -Name pwsh & Receive-Job $job
산출량
NPM(K) PM(M) WS(M) CPU(s) Id SI ProcessName ------ ----- ----- ------ -- -- ----------- 0 0.00 221.16 25.90 6988 988 pwsh 0 0.00 140.12 29.87 14845 845 pwsh 0 0.00 85.51 0.91 19639 988 pwsh $job = Get-Process -Name pwsh & Remove-Job $job
PowerShell 작업에 대한 자세한 내용은 About_Jobs를 참조하십시오.
이 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★Start-Job
는, 「」와 되지 않습니다.Start-Job
필요한 경우 완전 수식 경로를 지정해야 합니다.
예를 들어 다음과 같습니다.
Start-Job { C:\absolute\path\to\command.exe --afileparameter C:\absolute\path\to\file.txt }
ps2> start-job {start-sleep 20}
나는 아직 실시간으로 stdout을 얻는 방법을 알아내지 못했다. start-job은 get-job을 사용하여 stdout을 조사해야 한다.
업데이트: 기본적으로 bash & operator인 원하는 작업을 쉽게 시작할 수 없습니다.여기 지금까지의 내 최고의 해커가 있다
PS> notepad $profile #edit init script -- added these lines
function beep { write-host `a }
function ajp { start powershell {ant java-platform|out-null;beep} } #new window, stderr only, beep when done
function acjp { start powershell {ant clean java-platform|out-null;beep} }
PS> . $profile #re-load profile script
PS> ajp
PowerShell 작업 cmdlet을 사용하여 목표를 달성할 수 있습니다.
PowerShell에서는 6개의 작업 관련 cmdlet을 사용할 수 있습니다.
- 취업
- 현재 세션에서 실행 중인 윈도우즈 PowerShell 백그라운드 작업을 가져옵니다.
- 수신 작업
- 현재 세션에서 윈도우즈 PowerShell 백그라운드 작업의 결과를 가져옵니다.
- 작업 제거
- 윈도우즈 PowerShell 백그라운드 작업을 삭제합니다.
- 시작 작업
- 윈도우즈 PowerShell 백그라운드 작업을 시작합니다.
- 작업 중지
- 윈도우즈 PowerShell 백그라운드 작업을 중지합니다.
- 대기 작업
- 세션에서 실행 중인 하나 또는 모든 윈도우즈 PowerShell 백그라운드 작업이 완료될 때까지 명령 프롬프트를 표시하지 않습니다.
관심 있는 경우 PowerShell에서 백그라운드 작업을 생성하는 방법 샘플을 다운로드할 수 있습니다.
이런 것도 할 수 있어요.
$a = start-process -NoNewWindow powershell {timeout 10; 'done'} -PassThru
그리고 만약 당신이 그것을 기다리십시오.
$a | wait-process
보너스 osx 또는 Linux 버전:
$a = start-process pwsh '-c',{start-sleep 5; 'done'} -PassThru
제가 가지고 있는 핑거 스크립트 예시입니다.arg는 배열로 전달됩니다.
$1 = start -n powershell pinger,comp001 -pa
dr;dr
Start-Process powershell { sleep 30 }
PowerShell v1.0에서 http://jtruher.spaces.live.com/blog/cns!7143DA6E51A2628D!130.entry에 설명된 솔루션을 성공적으로 사용했습니다.PowerShell v2.0에서는 확실히 쉬워집니다.
언급URL : https://stackoverflow.com/questions/185575/powershell-equivalent-of-bash-ampersand-for-forking-running-background-proce
'programing' 카테고리의 다른 글
Bash Histsize 대파일 크기? (0) | 2023.04.27 |
---|---|
기존 ASP에 웹 API를 추가하는 방법.NET MVC (5) 웹 애플리케이션 프로젝트? (0) | 2023.04.27 |
UITable View 아래에 추가 구분 기호 제거 (0) | 2023.04.22 |
배리언트 배열에 범위를 할당하는 데 문제가 발생하는 이유 (0) | 2023.04.22 |
Azure 웹사이트의 사이트에서 X509 Certificate 2 처리가 실패함 (0) | 2023.04.22 |