MEM_FORK.c



// INFORMACION DEL PROCESO
/*
	CODIGO COPIADO DE
https://poesiabinaria.net/2017/07/obtener-informacion-basica-procesos-del-sistema-linux-c-c-parte-3/
*/


#include <unistd.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
    if (argc<2)
        return perror("Falta un argumento"), 1;

    char statFileName[128];             /* /proc/PIC/stat - I think 512 bytes is far enough */
   
    sprintf(statFileName, "/proc/%s/stat", argv[1]);
    
    FILE *fd = fopen(statFileName, "r");
    if (fd == NULL)
        return perror("No puedo encontrar el proceso especificado"),1;

    char state, name[32];
    int pid, ppid, pgrp, session, tty, tpgid, nlwp;

    unsigned long flags, min_flt, cmin_flt, maj_flt, cmaj_flt, vsize, rsslim;

    unsigned long long utime, stime, cutime, cstime, start_time;

    long priority, nice, alarm, rss, startcode, endcode;
   
    fscanf(fd, "%d %s "
                 "%c "
                 "%d %d %d %d %d "
                 "%lu %lu %lu %lu %lu "
                 "%Lu %Lu %Lu %Lu "
                 "%ld %ld "
                 "%d "
                 "%ld "
                 "%Lu "
                 "%lu "
                 "%ld"
		 "%lu"
		 "%ld"
		 "%ld",
                 &pid,
                 name,
                 &state,
                 &ppid, &pgrp, &session, &tty, &tpgid,
                 &flags, &min_flt, &cmin_flt, &maj_flt, &cmaj_flt,
                 &utime, &stime, &cutime, &cstime,
                 &priority, &nice,
                 &nlwp,
                 &alarm,
                 &start_time,
                 &vsize,
                 &rss,
		 &rsslim,
		 &startcode,
		 &endcode);
   
    fclose(fd);

    printf ("PID: %d\n"
                   "CMD: %s\n"
                    "Estado: %c\n"
                    "PPID: %d\n"
		    "INICIO: %ld\n"
		    "FIN: %ld\n",
                    pid, name, state, ppid, startcode, endcode);
}