Mon 14 Oct 23:09:15 CEST 2024
This commit is contained in:
parent
7827edcba9
commit
dcc2d7b3d0
62
user/procstat.c
Normal file
62
user/procstat.c
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
Copyright (C) 2016-2019 The University of Notre Dame
|
||||||
|
This software is distributed under the GNU General Public License.
|
||||||
|
See the file LICENSE for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "library/syscalls.h"
|
||||||
|
#include "kernel/syscall.h"
|
||||||
|
#include "kernel/stats.h"
|
||||||
|
#include "library/string.h"
|
||||||
|
#include "library/errno.h"
|
||||||
|
|
||||||
|
int main(int argc, const char *argv[])
|
||||||
|
{
|
||||||
|
if (argc <= 1) {
|
||||||
|
printf("No program to run\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
unsigned int startTime;
|
||||||
|
syscall_system_time(&startTime);
|
||||||
|
|
||||||
|
int pid;
|
||||||
|
int fd = syscall_open_file(KNO_STDDIR,argv[1],0,0);
|
||||||
|
if(fd>=0) {
|
||||||
|
pid = syscall_process_fork();
|
||||||
|
if (pid == 0) { // child
|
||||||
|
syscall_process_exec(fd, argc-1, &argv[1]);
|
||||||
|
printf("exec failed\n");
|
||||||
|
return 1;
|
||||||
|
} else if (pid < 0) {
|
||||||
|
printf("fork failed\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
printf("couldn't find %s: %s\n",argv[1],strerror(fd));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* parent */
|
||||||
|
struct process_info info;
|
||||||
|
syscall_process_wait(&info, -1);
|
||||||
|
unsigned int timeElapsed;
|
||||||
|
syscall_system_time(&timeElapsed);
|
||||||
|
timeElapsed -= startTime;
|
||||||
|
struct process_stats stat;
|
||||||
|
syscall_process_stats(&stat, pid);
|
||||||
|
printf("Process %u exited with status %d\n", info.pid, info.exitcode);
|
||||||
|
printf("Time elapsed: %d:%d:%d\n", timeElapsed/3600, (timeElapsed%3600)/60, timeElapsed % 60);
|
||||||
|
printf("%d blocks read, %d blocks written\n", stat.blocks_read, stat.blocks_written);
|
||||||
|
printf("%d bytes read, %d bytes written\n", stat.bytes_read, stat.bytes_written);
|
||||||
|
|
||||||
|
printf("System calls used:\n");
|
||||||
|
for (int i = 0; i < MAX_SYSCALL; i++) {
|
||||||
|
if (stat.syscall_count[i]) {
|
||||||
|
printf("Syscall %d: %u\n", i, stat.syscall_count[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user