Re: PID mediante el nombre en C
El dom, 14-12-2003 a las 22:25, Nerox NRX escribió:
> Hola de nuevo, ¿Sabe alguien tambien si existe alguna funcion para C que
> consiga el PID de un proceso sabiendo su nombre? Al igual que "pidof".
Hola,
Yo no conozco ninguna función en C que te devuelva explícitamente el PID
de un proceso, si olvidamos la función getpid() que obtiene el PID del
propio proceso que la llama, o la función getppid() que devuelve el PID
del proceso padre del proceso actual.
Es muy útil en C el uso de un pipe: un mecanismo de comunicación entre
procesos, del cual precisamente, una de sus aplicaciones te permite
ejecutar cualquier comando y volcar su salida a una especie de fichero
temporal del que ni siquiera te tendrás que preocupar de crear o
eliminar.
A continuación, te muestro un ejemplo en el que se obtiene el PID del
proceso init:
-----------------------------------------------------------------------
#include <stdio.h>
int main()
{
FILE *fich = NULL;
int pid = -1;
if ((fich = popen("pidof init", "r")) == NULL){
printf("Error al ejecutar popen\n");
exit(1);
}
fscanf(fich, "%d", &pid);
pclose(fich);
if (pid == -1) printf("No existe el proceso init \n");
else printf("El PID del proceso init es: %d \n", pid);
exit(0);
}
-----------------------------------------------------------------------
Como ves, el manejador del fichero que te devuelve la función
popen() y que apunta al fichero temporal que almacena la información de
salida de la ejecución del comando, es exactamente igual a cualquier
otro manejador de archivo y permite el uso de las mismas funciones,
como la empleada en el ejemplo: fscanf().
Espero que te sirva.
Un saludo,
Belén
P.D. Recuerda que también existe el comando system() que te permite
ejecutar cualquier llamada al sistema. El comando a ejecutar se lo
pasarías como cadena, y es el único parámetro que recibe esta función.
Claramente, para que no te muestre por pantalla la salida, puedes
pedirle que ejecute algo del estilo: system("pidof init > temporal");
y luego procesar ese fichero. Esto, obviamente, es lo que ya hacen los
pipes que vimos antes... De todos modos, lee: man system antes de
emplearla.
-------------------------------------------------------------------------
Ana Belén Barragáns Martínez
Departamento de Enxeñería Telemática
E.T.S.E. Telecomunicación Tlf: +34-986812181
Campus As Lagoas-Marcosende Fax: +34-986812116
36200 - Vigo mailto: belen@det.uvigo.es
Pontevedra (Spain) URL: http://www-gris.det.uvigo.es/~belen
-------------------------------------------------------------------------
Reply to: