diff --git a/README b/README.md similarity index 99% rename from README rename to README.md index af00bf94..019579d1 100644 --- a/README +++ b/README.md @@ -1,9 +1,6 @@ CPULIMIT ======== -About ------ - Cpulimit is a tool which limits the CPU usage of a process (expressed in percentage, not in CPU time). It is useful to control batch jobs, when you don't want them to eat too many CPU cycles. The goal is prevent a process from running for more than a specified time ratio. It does not change the nice value or other scheduling priority settings, but the real CPU usage. Also, it is able to adapt itself to the overall system load, dynamically and quickly. The control of the used CPU amount is done sending SIGSTOP and SIGCONT POSIX signals to processes. All the children processes and threads of the specified process will share the same percentage of CPU. diff --git a/src/cpulimit.c b/src/cpulimit.c index 9b25b87c..50eabeac 100644 --- a/src/cpulimit.c +++ b/src/cpulimit.c @@ -43,6 +43,10 @@ #include #include +#ifdef __APPLE__ || __FREEBSD__ +#include +#endif + #include "process_group.h" #include "list.h" @@ -147,7 +151,7 @@ static void increase_priority() { /* Get the number of CPUs */ static int get_ncpu() { - int ncpu = -1; + int ncpu; #ifdef _SC_NPROCESSORS_ONLN ncpu = sysconf(_SC_NPROCESSORS_ONLN); #elif defined __APPLE__ @@ -156,6 +160,8 @@ static int get_ncpu() { sysctl(mib, 2, &ncpu, &len, NULL, 0); #elif defined _GNU_SOURCE ncpu = get_nprocs(); +#else + ncpu = -1; #endif return ncpu; } diff --git a/src/list.c b/src/list.c index a1c20a3d..2a78358a 100644 --- a/src/list.c +++ b/src/list.c @@ -66,7 +66,6 @@ void delete_node(struct list *l,struct list_node *node) { } l->count--; free(node); - node = NULL; } void destroy_node(struct list *l,struct list_node *node) { @@ -75,7 +74,7 @@ void destroy_node(struct list *l,struct list_node *node) { delete_node(l,node); } -int is_EMPTYLIST_list(struct list *l) { +int is_empty_list(struct list *l) { return (l->count==0?TRUE:FALSE); } @@ -123,8 +122,8 @@ void *locate_elem(struct list *l,void *elem) { } void clear_list(struct list *l) { - struct list_node *tmp; while(l->first!=EMPTYLIST) { + struct list_node *tmp; tmp=l->first; l->first=l->first->next; free(tmp); @@ -135,8 +134,8 @@ void clear_list(struct list *l) { } void destroy_list(struct list *l) { - struct list_node *tmp; while(l->first!=EMPTYLIST) { + struct list_node *tmp; tmp=l->first; l->first=l->first->next; free(tmp->data); diff --git a/src/memrchr.c b/src/memrchr.c index ba788f52..1f378702 100644 --- a/src/memrchr.c +++ b/src/memrchr.c @@ -26,10 +26,9 @@ memrchr(s, c, n) int c; size_t n; { - const unsigned char *cp; - if (n != 0) { - cp = (unsigned char *)s + n; + const unsigned char *cp; + cp = (unsigned char *)s + n; do { if (*(--cp) == (unsigned char)c) return((void *)cp); diff --git a/src/process_group.c b/src/process_group.c index f1be4591..06d73a6f 100644 --- a/src/process_group.c +++ b/src/process_group.c @@ -172,7 +172,6 @@ void update_process_group(struct process_group *pgroup) else { assert(tmp_process.pid == p->pid); - assert(tmp_process.ppid == p->ppid); assert(tmp_process.starttime == p->starttime); add_elem(pgroup->proclist, p); if (dt < MIN_DT) continue; diff --git a/src/process_iterator.h b/src/process_iterator.h index 70520b68..4783885f 100644 --- a/src/process_iterator.h +++ b/src/process_iterator.h @@ -56,7 +56,7 @@ struct process { //ppid of the process pid_t ppid; //start time (unix timestamp) - int starttime; + time_t starttime; //cputime used by the process (in milliseconds) int cputime; //actual cpu usage estimation (value in range 0-1) @@ -74,7 +74,7 @@ struct process_filter { struct process_iterator { #ifdef __linux__ DIR *dip; - int boot_time; + time_t boot_time; #elif defined __FreeBSD__ kvm_t *kd; struct kinfo_proc *procs; diff --git a/src/process_iterator_linux.c b/src/process_iterator_linux.c index 43c27718..f7fd382b 100644 --- a/src/process_iterator_linux.c +++ b/src/process_iterator_linux.c @@ -21,9 +21,9 @@ #include -static int get_boot_time() +static time_t get_boot_time() { - int uptime; + int uptime = 0; FILE *fp = fopen ("/proc/uptime", "r"); if (fp != NULL) { @@ -103,7 +103,7 @@ static int read_process_info(pid_t pid, struct process *p) return -1; } fclose(fd); - sscanf(buffer, "%s", p->command); + strcpy(p->command, buffer); return 0; } diff --git a/tests/process_iterator_test.c b/tests/process_iterator_test.c index 20ef479f..16151967 100644 --- a/tests/process_iterator_test.c +++ b/tests/process_iterator_test.c @@ -28,7 +28,7 @@ #include #include -#ifdef __APPLE__ +#ifdef __APPLE__ || __FREEBSD__ #include #endif