Saturday 17 March 2018

Waitforexit 프로세스 powershell


대기 활동 프로세스 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를 사용했습니다.

대기 활동 프로세스 powershell
App Store를 통해 가져 오기 우리의 응용 프로그램 에서이 게시물을 읽으십시오!
Start-Process로 표준 출력 및 오류 캡처.
StandardError 및 StandardOutput 속성에 액세스 할 때 PowerShell의 Start-Process 명령에 버그가 있습니까?
다음을 실행하면 출력이 표시되지 않습니다.
그러나 출력을 파일로 리디렉션하면 예상되는 결과가 나타납니다.
이것이 Start-Process가 어떤 이유로 설계된 방법입니다. 파일로 보내지 않고 가져 오는 방법은 다음과 같습니다.
질문에 주어진 코드에서 initiation 변수의 ExitCode 속성을 읽는 것이 효과가 있다고 생각합니다.
귀하의 예에서와 같이 - PassThru 및 ​​-Wait 매개 변수를 추가해야합니다 (이것은 잠시 동안 나를 잡았습니다)
나는 또한이 문제를 가지고 Andy 코드를 사용하여 여러 명령을 실행할 필요가있을 때 정리할 함수를 만들었고 stderr, stdout 및 exit 코드를 객체로 반환합니다. 함수에서 주목해야 할 점은 경로에서 \를 받아들이지 않으므로 전체 경로를 사용해야한다는 것입니다.
사용법은 다음과 같습니다.
Andy Arismendi와 LPG의 사례를 통해 나는 정말로 문제가있었습니다. 항상 다음을 사용해야합니다.
전체 예 :
우리는 위에 제공된 LPG 기능을 사용하고 있습니다. 그러나 이것은 많은 출력을 생성하는 프로세스를 시작할 때 발생할 수있는 버그를 포함합니다. 이로 인해이 기능을 사용할 때 교착 상태가 발생할 수 있습니다. 대신 아래의 수정 된 버전을 사용하십시오.
이 문제점에 대한 자세한 내용은 MSDN에서 확인할 수 있습니다.
부모 프로세스가 p. StandardError. ReadToEnd 전에 p. WaitForExit를 호출하고 자식 프로세스가 리디렉션 된 스트림을 채우기에 충분한 텍스트를 쓰는 경우 교착 상태가 발생할 수 있습니다. 부모 프로세스는 자식 프로세스가 종료 될 때까지 무기한 대기합니다. 자식 프로세스는 부모가 전체 StandardError 스트림에서 읽을 수 있도록 무기한 대기합니다.
편집 : 누락 된 중괄호 Try 블록 끝에 추가되었습니다.

대기 활동 프로세스 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 웹 사이트를 탈퇴 할 때 온라인 설문 조사가 제공됩니다.

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"
OS vista home Premium x64 / sp2.
CPU 및 9150e 쿼드 코어 1.8gz.
마더 보드 acpi x64.
그래픽 카드 nvidia geforce 6150se nforce 430.
사운드 카드 realtek high def audio.
화면 해상도 1440x900.
하드 드라이브 st350062 oas scsi.
인터넷 속도 nvidia nforce 10/100 mbps 이더넷, 무선 802.11 b / g.
Re : Diagnostics. Process] :: Start ($ StartInfo).WaitForExit.
나는 비스타 홈 프리미엄 (놀람!)에 문제가있다. 나는 작동하는 가정용 무선 네트워크에 연결되어있다 : XP를 실행할 수있는 2 대의 컴퓨터.
위의 클래스는 start 메소드가 "exe", "batch" . 또는 "powershelllcmds"로 둘러 쌀 수 있는가? 예 : 외부에서 실행할 수 있습니다.
모두들 안녕. PARALLEL (하나씩)이 아닌 여러 IP 노드 (서버, 라우터)에 대해 명령을 실행하고 싶습니다. 내 사건을 증명해.
매개 변수를 사용하여 프로세스를 시작하는 방법을 파악하려고합니다. 예를 들면 다음과 같이 할 수 있습니다 :: 시작 (& quot; Outlook & quot;) 및 Outlook이 시작됩니다. 나는 원한다.
누구든지 System. Diagnostics. Process를 사용하여 & quot; 포장 & quot; 콘솔 응용 프로그램은 어떤 프로세스에 따라 항상 I / O를 전송하지는 않습니다.
이 메서드를 사용하여 시작된 응용 프로그램을 제어 할 수 싶습니다. 내가 전달할 수있는 ProcessStartInfo를 설정하는 방법에 대한 아이디어.
나는 모든 것을 할 수 있기 때문에 :: Start (& quot ;. & quot;)를 많이 사용한다. Start | 대화 상자가 실행됩니다. PowerShell의 변수 확장과 결합하여 사용할 수도 있습니다.

No comments:

Post a Comment