Saturday 24 March 2018

시스템 진단 프로세스 waitforexit powershell


Diagnostics. Process] :: Start ($ StartInfo).WaitForExit.
Diagnostics. Process] :: Start ($ StartInfo).WaitForExit.
Vista home x64 powershell 스크립트 사용. 루프에서 프로그램을 시작하고 종료 될 때까지 기다리십시오. 가변 길이 인수와 함께 많은 매개 변수가 있습니다.
hlds. exe - console - insecure - game svencoop4 - port 27025 - noipx - num_edicts 4096 + 로그온 maxplayers 12 + map osprey.
\ hlds. exe - console - insecure - game svencoop4 - port 27025 - noipx - num_edicts 4096 + logplay + maxplayers 12 + map osprey | out-null.
$ StartInfo. Arguments = "-console + map c1a1 - game svencoop4"
Re : Diagnostics. Process] :: Start ($ StartInfo).WaitForExit.
비스타 공개 토론은 독립적 인 웹 사이트이고 허가되지 않았다,
Microsoft Corporation이 승인하거나 후원하거나 승인 한 것입니다.
"Windows Vista", Start Orb 및 관련 자료는 Microsoft Corp. 의 상표입니다.

System. diagnostics. process waitforexit powershell
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
-Wait 대신 Start-Process 및 WaitForExit을 사용하여 ExitCode를 얻습니다.
PowerShell에서 프로그램을 실행하고 Exit를 기다린 다음 ExitCode에 액세스 할 수 있지만 많은 행운이 없습니다. 나는 백그라운드에서 계속할 수있는 처리가 필요하기 때문에 Start-Process와 함께 사용하고 싶지 않다.
다음은 간단한 테스트 스크립트입니다.
이 스크립트를 실행하면 메모장이 시작됩니다. 이 작업을 수동으로 닫으면 종료 코드가 인쇄되고 - wait를 사용하지 않고 다시 시작됩니다. 이것이 종료되면 ExitCode가 제공되지 않습니다.
프로그램 시작과 종료를 기다리는 사이에 추가 처리를 수행 할 수 있어야하므로 - Wait을 사용할 수 없습니다. 어떤 방법으로이 작업을 수행 할 수 있으며 여전히이 프로세스에서. ExitCode 속성에 액세스 할 수 있습니까?
네가 할 수있는 두 가지 일은 내가 생각하기에.
System. Diagnostics. Process 개체를 수동으로 만들고 시작 프로세스를 건너 뜁니다. 백그라운드 작업에서 실행 파일을 실행합니다 (비 대화식 프로세스에만 해당).
다음 중 하나를 수행하는 방법은 다음과 같습니다.
여기서 기억해야 할 두 가지가 있습니다. 하나는 - PassThru 인수를 추가하는 것이고 두 가지는 - Wait 인수를 추가하는 것입니다. 이 결함으로 인해 wait 인수를 추가해야합니다. connect. microsoft / PowerShell /feedback/details/520554/start-process-does-not-return-exitcode-property.
이렇게하면 프로세스 객체가 다시 전달되고 해당 객체의 ExitCode 속성을 볼 수 있습니다. 다음은 그 예입니다.
-PassThru 또는 - Wait없이 실행하면 아무 것도 출력하지 않습니다.
위의 마지막 제안을 시도하면서 더 간단한 해결책을 발견했습니다. 내가해야만하는 것은 프로세스 핸들을 캐시하는 것이었다. 내가 그렇게하자마자, $ process. ExitCode가 올바르게 작동했습니다. 프로세스 핸들을 캐시하지 않으면 $ process. ExitCode가 null입니다.
또는 이것을 추가하십시오.
이 코드를 사용하면 System. Diagnostics. Process. Start ()를 직접 사용하여 수행 할 수없는 리디렉션 된 출력 / 오류 스트림을 PowerShell에서 처리하도록 할 수 있습니다.
내 과정이 끝났지 만 '- 기다림'옵션은 나를 막아주는 것처럼 보였다.
나는 Adrian의 솔루션을 시도하고 그것을 작동합니다. 하지만 프로세스 핸들을 가져 오는 부작용에 의존하는 대신 Wait-Process를 사용했습니다.

System. diagnostics. process waitforexit powershell
내 응용 프로그램에 다음 코드가 있습니다.
System. Diagnostics. Process proc = new System. Diagnostics. Process ();
다른 응용 프로그램을 통해 이것을 호출하면 프로세스가 중지됩니다.
그런 다음 5 초를 기다렸다가 이제는 정상적으로 작동합니다. 그러나이 시간 초과 값은 시스템 리소스 및 입력 응용 프로그램의 처리량에 따라 달라질 수 있으므로이 문제를 수정하는 더 좋은 방법을 찾아야합니다.
그래서, 내 질문은 우리가 System. Diagnostics를 사용하여 프로세스를 만들고 있다면, OS가 별도의 스레드를 만들고 그것을 기본 스레드 또는 UI 스레드로 만드나요?
또는 System. Threading. Thread와 동일한 CLR 스레드를 만드는 중입니까?
Thread-pool을 사용하여 작업자 스레드를 생성하는 것이 더 좋은 선택일까요?
스레드 풀이 사용자 모드 스케줄링을 사용합니까?
이것에 대한 당신의 도움을 감사하십시오.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
모든 답장.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
EnableRaisingEvents = false로 이벤트를 기다리면 WaitForExit을 타이머로 사용하고 있음을 의미합니다. 적절한 값으로 설정하십시오.
저는 5000을 값으로 주었고 문제를 해결했습니다. 내 걱정은 다른 시스템 자원, 입력 내용 크기 등으로 유사하게 작동합니까?
관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까?
Windows는 실시간 운영 체제가 아니므로 모든 타이머는 OS의 일정에 따라 달라집니다. 아마도 System. Timers. Timer가 가장 정확합니다.
& quot; 관련 프로세스가 간격의 끝까지 종료되지 않으면 어떻게됩니까? & quot; 이 기능을 사용 중지했습니다. 이것이 당신이하려는 일이라면, 그것을 가능하게하십시오. 프로세스를 시작하는 데 사용한 스레드를 차단하고 싶지 않으면 백그라운드 스레드에서 시작하십시오. BackgxroundWorker가 이에 적합합니다.
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
System. Diagnostics가 백그라운드 스레드 또는 작업자 스레드도 생성하기 때문에 하루가 끝날 때 변경 사항이 없으므로 별도의 스레드를 다시 만들지 않으므로 그 점을 알아야합니다.
위의 구현과 백그라운드 스레드를 만드는 것의 차이점은 무엇입니까?
응용 프로그램의 내부 및 외부 스레드를 혼란스럽게합니다. UI 스레드에서 WaitForExit을 사용하는 경우. UI 스레드가 응답하지 않게됩니다. 문제가 발생하면 BackgroundWorker의 DoWork 이벤트에 새 프로세스를 생성하십시오. 프로세스가 종료되면 UI 스레드에 경고하는 RunWorkerCompleteEvent가 트리거됩니다.
민 주 (Min Zhu) 마이크로 소프트 우연한 직원의 답변으로 표시 중재자 Monday, July 18, 2011 3:10 AM.
Microsoft는 Msdn 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 실시하고 있습니다. 참여를 선택하면 Msdn 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

PowerShell의 프로세스 관리.
PowerShell에서 프로세스를 관리하는 방법에 대해 최근에 여러 사람들이 질문했습니다. 이 블로그 게시물은 이러한 질문에 대한 답을 제공해야합니다.
쉘 (shell)에서 기대할 수 있듯이, PowerShell의 일부인 경우 프로세스를 시작하기 위해 특별한 작업을 수행 할 필요가 없습니다. VBScript와 같은 프로그래밍 언어에서는 다음과 같이 상당히 복잡한 작업을 수행해야합니다.
objWMIService = GetObject를 설정하십시오 (winmgmts : & # 8221;
Set objStartup = objWMIService. Get (& Win32_ProcessStartup & # 8221;)
objConfig = objStartup. SpawnInstance_를 설정하십시오.
Set objProcess = GetObject (& winmgmts : root \ cimv2 : Win32_Process & # 8221;)
objProcess. Create # Notepad. exe & # 8221; Null, objConfig, intProcessID.
그러나 쉘 (PowerShell, cmd. exe, bash 등)에서는 단순히 메모장과 같은 프로그램을 시작하기 만하면됩니다. 메모장은 & # 8221; 보여진 바와 같이.
이제 당신이 이것을 할 때 쉘은 즉시 복귀하고 다음 명령을 요구할 것입니다. 이것은 메모장이 win32 GUI 프로세스이고 백그라운드에서 실행되기 때문입니다. 반면에 'ping. exe'와 같은 콘솔 응용 프로그램을 시작하면 PowerShell은 해당 프로세스가 완료 될 때까지 대기합니다.
그러나 Win32 프로세스를 기다리고 싶다면 어떻게해야합니까? cmd. exe에서 & # 8220; 시작 / 대기 & # 8221;로 & # 8221; 이 명령은 PowerShell에서 직접 사용할 수 없습니다. 그럼 우리는 무엇을 하나?
PowerShell은 실행 파일을 직접 실행합니다. 프로세스가 종료 될 때까지 기다리면 종료 코드는 $ LASTEXITCODE에 남아 있습니다. 이제 Win32 실행 파일이 파이프 라인의 마지막 명령이고 리디렉션되지 않으면 프로세스가 백그라운드에서 실행됩니다. 그러나 출력을 파이프로 보내면 PowerShell은 명령이 종료 될 때까지 기다립니다.
따라서 이것은 GUI 프로세스가 종료되기를 기다리는 간단한 (직관적이지는 않지만) 기다림입니다.
또는 프로세스가 이미 실행중인 경우 Get-Process를 사용하여 필요한 정보를 얻은 다음 해당 개체에 대해 WaitForExit ()을 수행 할 수 있습니다.
다음은 프로세스를 시작하는 대신 문서를 여는 다소 세련된 예제입니다. 이번에는 실행 가능한 이름이 아닌 창 제목으로 프로세스를 찾습니다.
불행히도 프로세스를 검색하면 항상 잘못된 프로세스를 찾을 수 있음을 의미합니다. 프로세스 객체를 직접 얻는 것이 이상적입니다. 따라서보다 정확한 프로세스 관리를 위해서는 System. Diagnostics. Process 클래스를 사용하고 프로세스를 직접 시작해야합니다. 예를 들어 [diagnostics. process] :: Start ()를 사용하여 프로세스를 기다릴 수 있습니다.
& # 8220; $ pwd \ foo. txt & # 8221; 파일의 전체 경로를 지정합니다. 이는 PowerShell이 ​​현재 디렉토리에 대한 자체 아이디어를 유지하기 때문입니다. (이 메모는 파일 시스템에 액세스하는 모든 API 사용에 적용됩니다. 절대 경로를 제공해야합니다.)
이제 우리는 프로그래밍 언어에서 찾은 복잡성 수준으로 돌아 가기 시작했습니다. 그러나, 당신은 또한 모든 언어의 힘을 가지고 있습니다. 다음은 예제 스크립트 인 background. ps1 & # 8221; 별도의 창에서 (또는 - inconsole 매개 변수를 지정하면 같은 창에서) 분리 된 스크립트 블록을 실행할 수 있습니다.
이 스크립트를 사용하면 cmd. exe에서 수행 할 수 없지만 VBScript에서 수행 할 수있는 작업을 PowerShell에서 수행 할 수 있습니다.
마지막으로, 여기에는 프로세스로 작업하는 두 가지 방법이 있습니다. PowerShell에는 시작 명령이 없지만 cmd. exe는 시작 / 대기를 수행 할 수 있습니다.
마지막으로, PowerShell Community Extensions에는 Start-Process cmdlet가 포함되어 있습니다. 다음에서 이러한 기능 목록을 얻을 수 있습니다.
Bruce Payette [MSFT]
Windows PowerShell Tech Lead.
인기 서버 & # 038; 도구 블로그.
최근 게시물.
Windows 10 Fall Creators Update 및 Windows Server 1709에서 2017 년 12 월 15 일 DSC 리소스 이름 지정 지침 2017 년 12 월 8 일 PowerShellGet 및 PowerShell 갤러리에 시험판 버전이 추가됨 2017 년 12 월 5 일 PowerShell Core 6 출시 후보 2001 년 11 월 17 일.
subscript를 호출하는 마스터 powershell 스크립트가 있습니다. 아래 첨자는 오류를 발생 시키지만 MASTER의 $ LASTEXITCODE는이를 잡아 내지 못합니다.
기본적으로 내 프로세스는 throw 명령이 실행될 때 중지되고 프로세스는 마스터로 리턴되지 않습니다.
이 문제를 해결할 방법이 있습니까?
이 기사에 대해 감사드립니다.
Start-Process 및 Jobs 확장과 같은 V2 확장이 모두 포함 된 업데이트 된 버전을 보는 것은 정말 좋을 것입니다.
모든 노력 덕분에 PowerShell은 프로세스 자동화를위한 진정으로 놀라운 툴 중 하나입니다.
자세한 내용은 다음을 참조하십시오 : [link] Shay [link]
짧은 Google 검색 결과 : & amp; lt; [link] & gt; 여기서 tip-to-pipe 출력이 out-null로 제공됩니다. 메모장.
사실 저는 VB와 C ++로 작성된 프로그램을 통합하고 있습니다. VB에서 설계된 버튼을 클릭하여이 C ++ 프로그램을 실행할 수 있습니다. 일단 버튼을 클릭하면 프로그램이 도스 플랫폼에서 실행됩니다. 나는이 도스 플랫폼이 보이기를 원하지 않는다. 하지만 C ++ 프로세스는 보이지 않는 백그라운드에서 계속 실행되어야한다.
변수를 포함하는 스크립트 블록을 통과 시키면 코드가 작동하지 않는 것처럼 보입니다. 이는 하위 프로세스가 상위 변수를 상속하지 않기 때문입니다. 어떻게 이것을 극복 할 수 있습니까?
Bruce, 나는 scriptblocks의 배경 처리 (ps1.soapyfrog / 2007 / 01 / 22 / running-pipelines-in-the-background /에서)를 얻기 위해 runspaces로 놀아왔다.
우리는 앞으로 출시 될 때 이것이 더욱 친숙해질 것으로 보입니까?
호스트 응용 프로그램이 실제로 사용할 수있는 런스 페이스가 있음을 알았지 만 서비스가 잘되는 것처럼 보입니다.
& quot; PowerShell connect site & quot; 주목된다.
& # 8220; $ np = get-process notepad & # 8221; 당신이 메모장을 많이 사용한다면 * extemely * hit 또는 miss입니다. 당신은 오류를 줄이기 위해 당신 등이 만든 시작 날짜별로 프로세스를 정렬 할 수 있지만 예 & # 8211; 우리는 runspace에서 생성 된 가장 최근의 프로세스를 얻는 방법을 제공해야합니다. 하나의 $ LASTPROCESS 변수를 가지기보다는 $ error 행에있는 $ process 배열이 좋을 것이라고 생각했습니다. 가장 최근에 생성 된 프로세스는 $ process [0]에 보관됩니다.
& gt; PowerShell은 쉘이므로 프로세스 / 작업 제어가 일류 시민이어야합니다.
이는 New Process / Start-Process cmdlet을 구현했지만 프로젝트에서 한순간에 삭제 된 것 같습니다. V1에 들어간 항목을 감안할 때 PowerShell을 사용하면 [Diagnostics. Process]에 액세스 할 수 있으므로 기본 프로세스 관리 이외의 다른 프로세스 관리는 상대적으로 낮은 순위가됩니다. 즉, 복잡 할 수도 있지만 거의 모든 것을 할 수 있습니다. 우주선은 제프리가 말한대로 선택하는 것입니다.
PowerShell 연결 사이트에 다른 사용자가 수정할 수 있도록 요청을 게시하십시오. 이것은 다음 버전으로 들어가는 것에 대한 티라지 프로세스의 중요한 데이터 소스입니다. 충분한 수의 사람들이 그것을 요구하면 V. Next의 짧은 목록을 읽습니다.
그리고 이전의 코멘트에 응답하기 :
& gt; 원격 컴퓨터에서 프로세스를 시작하는 powershell 동등 물은 무엇입니까? 여전히 WMI를 사용합니까?
1.0의 원격 작업에서는 WMI, 원격 API 또는 기타 기존 원격 메커니즘을 사용해야합니다. PowerShell 1.0에는 명시 적 원격 기능이 없습니다. 원격 지원은 다음 릴리스에서 Pri 0입니다.
$ np = get-process 메모장.
조금 히트이고 그리워. & # 8211; 어떤 메모장 프로세스를 가져야합니까? 더욱이 일치하는 항목이 하나 있으면 하나의 Process 객체를 반환합니다. & # 8230; 그렇지 않다면, 배열.
다음 버전의 PowerShell은 시작한 마지막 프로세스의 프로세스 개체에 $ LASTPROCESS 변수를 미리로드 할 수 있습니다.
또한 PowerShell은 셸이므로 프로세스 / 작업 제어가 일류 시민이며 cmdlet을 지원할 수 있습니까?
예 & # 8211; 나는 블로그 항목을 고쳤다. 감사.
$ LASTERRORCODE는 $ LASTEXITCODE 여야합니까?
VB 예제를 사용하면 원격 컴퓨터에서 프로세스를 실행할 수 있습니다. 그렇지 않으면 훨씬 간단한 WSH 명령으로 프로세스를 실행할 수 있습니다. 원격 컴퓨터에서 프로세스를 시작하는 powershell 동등 물은 무엇입니까? 여전히 WMI를 사용합니까?

No comments:

Post a Comment