diff --git a/README b/README.md similarity index 99% rename from README rename to README.md index af00bf9..019579d 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 9b25b87..50eabea 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 a1c20a3..2a78358 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 ba788f5..1f37870 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 f1be459..06d73a6 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_linux.c b/src/process_iterator_linux.c index 43c2771..c8cdd07 100644 --- a/src/process_iterator_linux.c +++ b/src/process_iterator_linux.c @@ -23,7 +23,7 @@ static int 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 20ef479..1615196 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