프로세스가 실행 중인지 올바르게 확인하고 프로세스를 중지하는 방법
FireFox와 같이 프로세스가 실행 중인지 여부를 확인하고 중지하는 올바른 방법은 FireFox)?
둘러본 결과 가장 좋은 방법은 다음과 같습니다.
if((get-process "firefox" -ea SilentlyContinue) -eq $Null){
echo "Not Running"
}
else{
echo "Running"
Stop-Process -processname "firefox"
}
이것이 그것을 하는 이상적인 방법입니까?그렇지 않다면 올바른 방법은 무엇입니까?
프로세스에 대해 두 번 문의하는 방식입니다.또한 린은 먼저 친절한 것에 대해 좋은 점을 제기합니다.저는 아마 다음과 같은 방법을 시도할 수 있습니다.
# get Firefox process
$firefox = Get-Process firefox -ErrorAction SilentlyContinue
if ($firefox) {
# try gracefully first
$firefox.CloseMainWindow()
# kill after five seconds
Sleep 5
if (!$firefox.HasExited) {
$firefox | Stop-Process -Force
}
}
Remove-Variable firefox
정확한 결과 "실행 중" / "실행되지 않음"을 표시할 필요가 없는 경우 다음을 간단히 수행할 수 있습니다.
ps notepad -ErrorAction SilentlyContinue | kill -PassThru
프로세스가 실행되고 있지 않으면 결과가 표시되지 않습니다.실행 중이었다면 다음과 같은 메시지가 표시됩니다.get-process
출력하면 프로세스가 중지됩니다.
@jmp242 - 제네릭System.Object
유형에 다음이 포함되어 있지 않습니다.CloseMainWindow
방법, 그러나 정적 캐스팅System.Diagnostics.Process
수집할 때 입력합니다.ProcessList
변수는 저에게 효과가 있습니다.이 주조로 코드(이 답변에서) 업데이트됨(사용하도록 루프 변경됨)ForEach-Object
)은 아래에 있습니다.
function Stop-Processes {
param(
[parameter(Mandatory=$true)] $processName,
$timeout = 5
)
[System.Diagnostics.Process[]]$processList = Get-Process $processName -ErrorAction SilentlyContinue
ForEach ($Process in $processList) {
# Try gracefully first
$Process.CloseMainWindow() | Out-Null
}
# Check the 'HasExited' property for each process
for ($i = 0 ; $i -le $timeout; $i++) {
$AllHaveExited = $True
$processList | ForEach-Object {
If (-NOT $_.HasExited) {
$AllHaveExited = $False
}
}
If ($AllHaveExited -eq $true){
Return
}
Start-Sleep 1
}
# If graceful close has failed, loop through 'Stop-Process'
$processList | ForEach-Object {
If (Get-Process -ID $_.ID -ErrorAction SilentlyContinue) {
Stop-Process -Id $_.ID -Force -Verbose
}
}
}
고마워요 @Joey.그것이 제가 찾고 있는 것입니다.
저는 단지 몇 가지 개선 사항을 가져올 뿐입니다.
- 여러 프로세스를 고려함
- 모든 프로세스가 종료된 시간 제한에 도달하지 않도록 하기 위해
- 전체를 함수로 포장하기
function Stop-Processes {
param(
[parameter(Mandatory=$true)] $processName,
$timeout = 5
)
$processList = Get-Process $processName -ErrorAction SilentlyContinue
if ($processList) {
# Try gracefully first
$processList.CloseMainWindow() | Out-Null
# Wait until all processes have terminated or until timeout
for ($i = 0 ; $i -le $timeout; $i ++){
$AllHaveExited = $True
$processList | % {
$process = $_
If (!$process.HasExited){
$AllHaveExited = $False
}
}
If ($AllHaveExited){
Return
}
sleep 1
}
# Else: kill
$processList | Stop-Process -Force
}
}
프로세스 킬링부터 시작해보자면, 여기.python
내 2센트:
Get-Process python3.9|Stop-Process
언급URL : https://stackoverflow.com/questions/28481811/how-to-correctly-check-if-a-process-is-running-and-stop-it
'programing' 카테고리의 다른 글
사용자 지정 iOS 보기 클래스를 만들고 여러 복사본(IB)을 인스턴스화하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
---|---|
WPF 버튼에 이미지 추가 (0) | 2023.05.29 |
선택기가 null을 반환하는지 탐지하려면 어떻게 해야 합니까? (0) | 2023.05.29 |
Gitdiff는 하위 프로젝트가 더럽다고 말합니다. (0) | 2023.05.29 |
VB.NET 대 C# 정수 나눗셈 (0) | 2023.05.29 |