es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El proceso System.Diagnostics.Process sigue ejecutándose cuando el hilo principal se apaga incorrectamente en C#.

Ejemplo ilustrando mi proyecto.

static async Task Main()
{
    await RunAsync("a.exe", string.Empty, string.Empty, 100000, null);
}
static async Task RunAsync(string fileName, string arguments, string workingDir, int timeLimit, string input)
{
    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.FileName = fileName.ToString();
    startInfo.Arguments = arguments.ToString();
    startInfo.WorkingDirectory = workingDir;
    startInfo.UseShellExecute = false;
    startInfo.CreateNoWindow = true;
    startInfo.ErrorDialog = false;
    startInfo.RedirectStandardInput = true;
    startInfo.RedirectStandardOutput = true;
    startInfo.RedirectStandardError = true;

    using (Process process = new Process())
    {
        process.StartInfo = startInfo;
        StringBuilder output = new StringBuilder();
        process.OutputDataReceived += (object sendingProcess, DataReceivedEventArgs e) =>
        {
            output.AppendLine(e.Data);
        };
        StringBuilder error = new StringBuilder();
        process.ErrorDataReceived += (object sendingProcess, DataReceivedEventArgs e) =>
        {
            error.AppendLine(e.Data);
        };

        process.Start();
        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

        if (input != null)
            await process.StandardInput.WriteLineAsync(input);

        if (!process.WaitForExit(timeLimit))
            process.Kill();

        if (!string.IsNullOrWhiteSpace(error.ToString()))
        {
            return;
        }

        Console.WriteLine(output.ToString());
        return;
    }
}

Supongo que el archivo a.exe se bloquea. El proceso lo Kill() cuando se alcanza el límite de tiempo.
Si el hilo principal se cierra de manera incorrecta, siempre se ejecutará y aparecerá en el Administrador de tareas.

Imagen

¿Hay alguna forma de que el proceso se destruya automáticamente sin el hilo principal?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no estoy seguro de si existe una forma de que un proceso se autodestruya sin el hilo principal. Sin embargo, una solución posible es crear un hilo separado para el proceso y manejar el tiempo de espera en ese hilo. De esta manera, el hilo principal puede continuar ejecutándose sin bloquearse. El hilo separado puede llamar al método Kill() en el proceso si se alcanza el tiempo de espera. Además, podrías agregar un controlador para la salida del proceso para asegurarte de que el proceso se limpie correctamente después de que se complete o sea terminado.

Comments are closed.