[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: