현재 C# 프로젝트에서 작업 중이며 System.Diagnostic.Process 클래스를 사용하고 있습니다.스레드를 통해 시작된 프로세스 닫기
내 프로그램이 시작되면 새 스레드가 만들어지고 각 스레드 내에서 다른 프로세스가 시작됩니다.
어느 시점에서 각 프로세스가 계속 실행되어야하는지 또는 중지되어야하는지 여부를 확인하려면 프로그램 내에서 설정을 확인해야하지만 특정 스레드가 시작한 프로세스를 어떻게 참조 할 수 있는지는 알 수 없습니다. 프로세스가 시작될 때마다 이름을 부여한 각 스레드가 있지만 C#은 스레드를 생성하고 프로세스를 시작한 다음 프로세스가 여전히 실행 중이고 출력을받는 경우에도 스레드를 닫습니다.
어떤 프로세스가 어떤 스레드에 의해 시작되었고 그 프로세스가 실행되지 않았는지 알 수있는 방법이 있습니까?
그러나 어떻게이 스레드 이름을 기반으로 프로세스를 중지 할 수 있도록이 메서드와 사전을 사용할 수 있는지 알 수 없습니다.
업데이트 아래 요청은 스레드에서 각 프로세스를 만드는 코드입니다. 사전에 스레드를 사용하고 있으므로 outputreceived 이벤트에서 참조 할 수는 있지만 프로세스를 닫아야 할 경우 어떻게해야하는지 잘 모릅니다.
Thread worker = new Thread(new ThreadStart(() => startProducts(product.Value[0].startScript, product.Value[0].productName)));
worker.IsBackground = false;
worker.Name = product.Value[0].productName;
worker.Start();
logging.logger(string.Format("Starting product '{0}'", product.Value[0].productName));
스레드가 호출하는 방법은 다음과 같습니다. 여기서는 각 프로세스가 시작됩니다. 각 프로세스는 서로 다른 이름의 스레드를 가지며 동일한 이름을 가진 두 개의 스레드가 존재하지 않습니다.
private void startProducts(string startScript, string product)
{
Process startProductProcess = new Process();
startProductProcess.StartInfo.FileName = startScript;
if (configManagement.productConfig[product][0].requireArguments == true)
{
startProductProcess.StartInfo.Arguments = configManagement.productConfig[product][0].arguments;
}
startProductProcess.StartInfo.UseShellExecute = false;
startProductProcess.StartInfo.RedirectStandardOutput = true;
StringBuilder processOutput = new StringBuilder("");
startProductProcess.OutputDataReceived += new DataReceivedEventHandler(startProductProcess_OutputDataReceived);
startProductProcess.Exited += new EventHandler(startProductProcess_Exited);
processTag.Add(startProductProcess, product);
startProductProcess.Start();
//Process localByName = Process.GetProcessById(startProductProcess.Id);
startProductProcess.BeginOutputReadLine();
logging.logger(string.Format("Started {0} with: {1} {2}", product,
startProductProcess.StartInfo.FileName, startProductProcess.StartInfo.Arguments));
}
사전을 사용하고 각 프로세스를 StatusEnum과 같은 것으로 사전에 저장해야하는 것처럼 들립니다. – SimpleVar
출력 이벤트 발생시 도움이 될 수 있도록 약간의 코드를 추가한다고 생각합니다. – Boardy