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.

¿Cómo matar un proceso de Windows por su Id en C?

Busqué en muchos sitios web sobre este problema pero no pude encontrar una respuesta buena.
Estoy obteniendo un pid desde un archivo de texto y luego intento matar ese proceso con la función Kill() pero cuando intento compilar veo este Error:

.\stopErraticord.c: En la función 'main':
.\stopErraticord.c:41:13: advertencia: declaración implícita de la función 'kill' [-Wimplicit-function-declaration]
             kill(pid, SIGTERM); // Terminar el proceso
             ^~~~
C:\Users\armin\AppData\Local\Temp\ccMB0Jar.o:stopErraticord.c:(.text+0x116): referencia sin definición a `kill'
collect2.exe: error: ld devolvió el estado de salida 1

<code>
Encontré algunos resultados para solucionarlo en Linux pero no pude encontrar ninguno para Windows :(
&lt;br&gt;aquí está el código:
</code>
            if ((fptr = fopen("pid.txt", "r")) == NULL) {
                printf("[!] Error abriendo pid.txt");
                exit(1); // Salir si el puntero devuelve NULL
            }

<pre><code>        fscanf(fptr, &quot;%[^\n]&quot;, pid_s);
        fclose(fptr);
        int pid = atoi(pid_s); // Convertir pid de cadena a entero
        kill(pid, SIGTERM); // Terminar el proceso
        printf(&quot;[&gt;] Proceso con Id: %d terminado&quot;, pid);
</code></pre>

Quiero saber cómo solucionar este error, pero mi objetivo principal es terminar ese proceso con una función en C no con la función System().
Así que si sabes cómo solucionar este error o conoces una mejor manera de terminar un proceso, agradeceré que me ayudes con eso.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El problema con el código es que la función kill() no está definida en el sistema operativo Windows. Es una función POSIX y solo funciona en entornos similares a Unix.

    Para terminar un proceso en Windows utilizando el lenguaje C, puedes utilizar la función TerminateProcess(), que está definida en la API de Windows.

    Aquí tienes un ejemplo de código para terminar un proceso en Windows utilizando C:

    #include <windows.h>
    #include <stdio.h>
    
    int main()
    {
        HANDLE hProcess;
        DWORD dwProcessId = 1234; // Reemplazar 1234 por el ID de proceso real
    
        hProcess = OpenProcess(PROCESS_TERMINATE, FALSE, dwProcessId);
        if (hProcess == NULL)
        {
            printf("Error: ¡No se pudo abrir el proceso!\n");
            return 1;
        }
    
        if (TerminateProcess(hProcess, 0))
            printf("¡Proceso terminado exitosamente!\n");
        else
            printf("Error: ¡No se pudo terminar el proceso!\n");
    
        CloseHandle(hProcess);
    
        return 0;
    }
    

    En este ejemplo, primero abrimos el proceso utilizando la función OpenProcess() y luego lo terminamos utilizando la función TerminateProcess(). También verificamos si hay errores, cerramos el identificador del proceso utilizando la función CloseHandle().

    Puedes reemplazar el ID del proceso (dwProcessId) por el ID de proceso real que quieras terminar.

    Espero que esta solución te ayude a terminar un proceso en Windows utilizando el lenguaje C sin utilizar la función System().</stdio.h></windows.h>

Comments are closed.