unpack zips in src to better compression
This commit is contained in:
230
sources/z-tools/trunk/ztask/process.c
Normal file
230
sources/z-tools/trunk/ztask/process.c
Normal file
@@ -0,0 +1,230 @@
|
||||
#include "general.h"
|
||||
#include "gmem.h"
|
||||
#include "string.h"
|
||||
#include "cpu.h"
|
||||
#include <time.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <fcntl.h>
|
||||
#include <math.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/vfs.h>
|
||||
|
||||
process *process_root = NULL;
|
||||
int process_nbr = 0;
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* process_attach: *
|
||||
* attach a entry in the global process list. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* pid: The PID of the application. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* the processe created or NULL *
|
||||
*==================================================================================*/
|
||||
|
||||
process *process_attach( int pid)
|
||||
{
|
||||
process *new = ( process *)gmalloc( sizeof(process));
|
||||
|
||||
if( !new)
|
||||
return NULL;
|
||||
|
||||
new -> pid = pid;
|
||||
new -> next = process_root;
|
||||
new->cpu_time = 0;
|
||||
|
||||
process_root = new;
|
||||
|
||||
process_nbr++;
|
||||
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* process_find_parent: *
|
||||
* find the parent( previous) entry in the process list. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* child: the function returns the parent of this entry. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* the parent entry else the root entry. *
|
||||
*==================================================================================*/
|
||||
process *process_find_parent( process *child)
|
||||
{
|
||||
process *scan = process_root;
|
||||
|
||||
while( scan)
|
||||
{
|
||||
if( scan->next != child)
|
||||
{
|
||||
scan = scan->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
return( scan);
|
||||
}
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* process_delete: *
|
||||
* Delete an entry in the process list. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* pid: the pid of the entry to delete. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* -- *
|
||||
*==================================================================================*/
|
||||
void process_delete( int pid)
|
||||
{
|
||||
process *scan = process_root, *parent;
|
||||
|
||||
while( scan)
|
||||
{
|
||||
if( scan->pid != pid)
|
||||
{
|
||||
scan = scan->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
parent = process_find_parent( scan);
|
||||
|
||||
if( parent == NULL)
|
||||
process_root = scan->next;
|
||||
else
|
||||
parent->next = scan->next;
|
||||
|
||||
gfree( scan);
|
||||
process_nbr--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* process_find: *
|
||||
* Find an entry in the process list. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* id: the pid of the entry to find. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* the entry or NULL if not found. *
|
||||
*==================================================================================*/
|
||||
process *process_find( int pid)
|
||||
{
|
||||
process *scan = process_root, *result = NULL;
|
||||
|
||||
while( scan)
|
||||
{
|
||||
if( scan->pid != pid)
|
||||
{
|
||||
scan = scan->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
result = scan;
|
||||
break;
|
||||
}
|
||||
|
||||
return( result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*==================================================================================*
|
||||
* scan_process: *
|
||||
* Make a list of all the process and add it in the global process list if *
|
||||
* necessary. *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* input: *
|
||||
* -- *
|
||||
*----------------------------------------------------------------------------------*
|
||||
* returns: *
|
||||
* -- *
|
||||
*==================================================================================*/
|
||||
void scan_process( void)
|
||||
{
|
||||
int pid, count = 0;
|
||||
uint32 old_cpu_time;
|
||||
DIR *dir;
|
||||
char *dirname;
|
||||
char buf[128];
|
||||
struct dirent *de;
|
||||
process *current_process = NULL, *scan;
|
||||
clock_t current_t, relative_t;
|
||||
static clock_t old_t = 0;
|
||||
|
||||
current_t = clock();
|
||||
|
||||
relative_t = current_t - old_t;
|
||||
|
||||
old_t = current_t;
|
||||
|
||||
if (( dir = opendir( "U:/kern")) == NULL)
|
||||
return;
|
||||
|
||||
while(( de = readdir( dir)) != NULL)
|
||||
{
|
||||
dirname = de->d_name;
|
||||
|
||||
if( dirname[0] != '1' && dirname[0] != '2' && dirname[0] != '3' && dirname[0] != '4' && dirname[0] != '5'
|
||||
&& dirname[0] != '6' && dirname[0] != '7' && dirname[0] != '8' && dirname[0] != '9')
|
||||
continue;
|
||||
|
||||
count++;
|
||||
|
||||
pid = atoi( dirname);
|
||||
|
||||
current_process = process_find( pid);
|
||||
|
||||
// Is already listed?
|
||||
if( current_process == NULL)
|
||||
current_process = process_attach( pid);
|
||||
|
||||
old_cpu_time = current_process->cpu_time;
|
||||
|
||||
get_info_by_pid( pid, current_process->name, current_process->ram_usage, ¤t_process->cpu_time);
|
||||
|
||||
sprintf( current_process->cpu_usage, "%lu", ((current_process->cpu_time - old_cpu_time) * 20) / relative_t);
|
||||
|
||||
current_process->ram_usage_txt_width = get_text_width( current_process->ram_usage);
|
||||
}
|
||||
|
||||
closedir( dir);
|
||||
|
||||
if( count != process_nbr)
|
||||
{
|
||||
scan = process_root;
|
||||
|
||||
while( scan != NULL)
|
||||
{
|
||||
sprintf( buf, "U:/kern/%d", scan->pid);
|
||||
|
||||
if (( dir = opendir( buf)) == NULL)
|
||||
{
|
||||
pid = scan->pid;
|
||||
scan = scan->next;
|
||||
process_delete( pid);
|
||||
continue;
|
||||
}
|
||||
else
|
||||
closedir( dir);
|
||||
|
||||
scan = scan->next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user