백그라운드 프로세스를 포킹/실행하기 위한 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-Jobampersand 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 $jobPowerShell 작업에 대한 자세한 내용은 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 |