Track process start time

This commit is contained in:
Kevin Lange 2017-01-29 19:30:07 +09:00
parent 6720d8dd95
commit 2f5e83da6b
6 changed files with 24 additions and 8 deletions

View File

@ -106,6 +106,7 @@ typedef struct process {
list_t * node_waits;
int awoken_index;
node_t * timeout_node;
struct timeval start;
} process_t;
typedef struct {

View File

@ -192,11 +192,6 @@ extern void get_date(uint16_t * month, uint16_t * day);
extern uint32_t boot_time;
extern uint32_t read_cmos(void);
struct timeval {
uint32_t tv_sec;
uint32_t tv_usec;
};
extern int gettimeofday(struct timeval * t, void * z);
extern uint32_t now(void);

View File

@ -12,4 +12,9 @@
typedef unsigned long size_t;
#define CHAR_BIT 8
struct timeval {
uint32_t tv_sec;
uint32_t tv_usec;
};
#endif

View File

@ -281,6 +281,7 @@ int exec(
debug_print(WARNING, "First four bytes: %c%c%c%c", head[0], head[1], head[2], head[3]);
current_process->name = strdup(path);
gettimeofday((struct timeval *)&current_process->start, NULL);
for (unsigned int i = 0; i < sizeof(fmts) / sizeof(exec_def_t); ++i) {
if (matches(fmts[i].bytes, head, fmts[i].match)) {

View File

@ -239,6 +239,8 @@ process_t * spawn_kidle(void) {
idle->shm_mappings = list_create();
idle->signal_queue = list_create();
gettimeofday(&idle->start, NULL);
set_process_environment(idle, current_directory);
return idle;
}
@ -453,6 +455,8 @@ process_t * spawn_process(volatile process_t * parent, int reuse_fds) {
proc->is_tasklet = 0;
gettimeofday(&proc->start, NULL);
/* Insert the process into the process tree as a child
* of the parent process. */
tree_node_t * entry = tree_node_create(proc);

View File

@ -37,6 +37,9 @@ static fs_node_t * procfs_generic_create(char * name, read_type_t read_func) {
fnode->close = NULL;
fnode->readdir = NULL;
fnode->finddir = NULL;
fnode->ctime = now();
fnode->mtime = now();
fnode->atime = now();
return fnode;
}
@ -194,7 +197,8 @@ static fs_node_t * finddir_procfs_procdir(fs_node_t * node, char * name) {
}
static fs_node_t * procfs_procdir_create(pid_t pid) {
static fs_node_t * procfs_procdir_create(process_t * process) {
pid_t pid = process->id;
fs_node_t * fnode = malloc(sizeof(fs_node_t));
memset(fnode, 0x00, sizeof(fs_node_t));
fnode->inode = pid;
@ -210,6 +214,9 @@ static fs_node_t * procfs_procdir_create(pid_t pid) {
fnode->readdir = readdir_procfs_procdir;
fnode->finddir = finddir_procfs_procdir;
fnode->nlink = 1;
fnode->ctime = process->start.tv_sec;
fnode->mtime = process->start.tv_sec;
fnode->atime = process->start.tv_sec;
return fnode;
}
@ -480,12 +487,12 @@ static fs_node_t * finddir_procfs_root(fs_node_t * node, char * name) {
if (!proc) {
return NULL;
}
fs_node_t * out = procfs_procdir_create(pid);
fs_node_t * out = procfs_procdir_create(proc);
return out;
}
if (!strcmp(name,"self")) {
return procfs_procdir_create(current_process->id);
return procfs_procdir_create((process_t *)current_process);
}
for (unsigned int i = 0; i < PROCFS_STANDARD_ENTRIES; ++i) {
@ -515,6 +522,9 @@ static fs_node_t * procfs_create(void) {
fnode->readdir = readdir_procfs_root;
fnode->finddir = finddir_procfs_root;
fnode->nlink = 1;
fnode->ctime = now();
fnode->mtime = now();
fnode->atime = now();
return fnode;
}