#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void rehacer_pantalla();
void presentar_menu();
void ejecutar_ps_completo();
int buscaespacio1(char *texto);
int buscaespacio2(int,char *texto);
typedef struct{
int num;
int proceso;
char nombre[350];
}linea_datos;
linea_datos linea[500];// numero maximo de procesos a gestionar
int main(int argc, char **argv) {
int op = 1000;
char entrada_texto[10];
char *comando[100];
int pro;
rehacer_pantalla();
while (op != 0) {
op = atoi(gets(entrada_texto));
switch (op) {
case 1:
system("ps");
printf("\n Pulse Enter \n");
break;
case 2:
system("ps a");
printf("\n Pulse Enter \n");
break;
case 3:
system("ps u");
printf("\n Pulse Enter \n");
break;
case 4:
system("ps x");
printf("\n Pulse Enter \n");
break;
case 5:
system("ps f");
printf("\n Pulse Enter \n");
break;
case 6:
system("jobs");
printf("\n Pulse Enter \n");
break;
case 7:
ejecutar_ps_completo();
printf("\n Pulse Enter \n");
break;
case 8:
printf("\nNº del proceso (a parar) ");
pro = atoi(gets(entrada_texto));
sprintf(comando,"kill -19 %d",pro);
system(comando);
printf("\n Pulse Enter \n");
break;
case 9:
printf("\nNº del proceso (a continuar): ");
pro = atoi(gets(entrada_texto));
sprintf(comando,"kill -18 %d",pro);
system(comando);
printf("\n Pulse Enter \n");
break;
case 10:
printf("\nNº del proceso (a terminar): ");
pro = atoi(gets(entrada_texto));
sprintf(comando,"kill 15 %d",pro);
system(comando);
printf("\n Pulse Enter \n");
break;
case 11:
printf("\nNº del proceso (a matar): ");
pro = atoi(gets(entrada_texto));
sprintf(comando,"kill 9 %d",pro);
system(comando) ;
printf("\n Pulse Enter \n");
break;
case -1:
op=0;
break;
default:
rehacer_pantalla();
op=1020;
}
}
return 0;
}
void rehacer_pantalla(muestra) {
int resp;
resp = system("clear");
presentar_menu();
}
void presentar_menu() {
printf("\033[47m\033[1;35m\033[2;0H Menu: MATA \033[0m\n");
printf("\033[3;0H-1) Salir del programa\n");
printf("\033[4;0H 1) Muestra los procesos del terminal\n ");
printf("\033[5;0H 2) Muestra los procesos de todos los usuarios del terminal\n");
printf("\033[6;0H 3) Identifica el usuario que ha puesto en marcha ese proceso y cuando se inicio ese proceso\n");
printf("\033[7;0H 4) Muestra los procesos que no dependen de un terminal");
printf("\033[8;0H 5) Rastrear que proceso es el padre de que proceso (forma arbol)");
printf("\033[9;0H 6) Muestra trabajos en 2º plano");
printf("\033[10;0H 7) Todos los procesos del ordenador, mostrando usuario y en forma de arbol");
printf("\033[11;0H 8) Parar un proceso");
printf("\033[12;0H 9) Continuar un proceso");
printf("\033[13;0H10) Terminar un proceso");
printf("\033[14;0H11) Matar un proceso");
printf("\033[15;0HNúmero de la opción: ");
printf("\033[15;21H"); // para que se ponga en la misma linea del nº de opcion
}
void ejecutar_ps_completo(){
int c = 0;
FILE *pf;
char texto[5455];
char *p;
char proceso[100];
char *lista_proceso[1000] ;
int ac=0;//
int pos_espacio1=0;
int pos_espacio2=0;
int b=0;
p = texto;
// obtengo los datos de la linea de procesos
pf = popen("ps a u x f", "r");
fgets(texto,5450, pf);
c++;
/* no me funciona !!!!!!
while (!feof(pf)) {
fgets(texto, 5450, pf);
c++;
//printf("%s \n",texto);
// analizo linea....
//sprintf(linea2,"%3d: %s", c, texto);
linea[c].num=c;
// buscar el primer " "
pos_espacio1=buscaespacio1(texto);
pos_espacio2=buscaespacio2(pos_espacio1,texto);
//printf("%3d , %3d \n %s \n",pos_espacio1,pos_espacio2,texto);
// asignar el trozo que hemos seleccionado
b=-1;
ac=pos_espacio1-1;
while (ac<pos_espacio2){
b++;
ac++;
proceso[b]=texto[ac];
}
proceso[b+1]='\0';
//printf("%3d , %3d, proceso: %s \n %s \n",pos_espacio1,pos_espacio2,proceso,texto);
strcpy(lista_proceso[linea[c].num],proceso);
//printf("%3d %s \n",linea[c].num,proceso);
}
pclose(pf);
*/
// escribo en pantalla los procesos
pf = popen("ps a u x f", "r");
c=-1;
fgets(texto, 350, pf);
c++;
printf(" %s", texto); // dibuja rotulo
while (!feof(pf)) {
fgets(texto, 350, pf);
c++;
printf("%3d: %s",c, texto);
}
pclose(pf);
}
int buscaespacio1(char *texto){
int a=0;
int paso1=0;
int c=0;
while (a!=1){
if (texto[c]==' '){
paso1=1;
} else {
if (paso1==1 && texto[c]!=' '){
return c;
}
}
c++;
}
return 0;
}
int buscaespacio2(int inicio,char *texto){
int a=0;
int paso1=0;
int c=inicio;
while (a!=1){
if (texto[c]==' '){
paso1=1;
return c;
}
c++;
}
return 0;
}
No hay comentarios:
Publicar un comentario