Track process start time
This commit is contained in:
parent
6720d8dd95
commit
2f5e83da6b
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -12,4 +12,9 @@
|
||||
typedef unsigned long size_t;
|
||||
#define CHAR_BIT 8
|
||||
|
||||
struct timeval {
|
||||
uint32_t tv_sec;
|
||||
uint32_t tv_usec;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -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 *)¤t_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)) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user