[svn-upgrade] Integrating new upstream version, cpulimit (1.12~svn10)
[debian/cpulimit.git] / procutils.h
1 /**
2  *
3  * cpulimit - a cpu limiter for Linux
4  *
5  * Copyright (C) 2005-2008, by:  Angelo Marletta <marlonx80@hotmail.com>
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  */
21
22 #ifndef __PROCUTILS_H
23
24 #define __PROCUTILS_H
25
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <unistd.h>
29 #include <signal.h>
30 #include <sys/types.h>
31 #include <dirent.h>
32 #include <string.h>
33 #include "list.h"
34 #include "process.h"
35
36 #define PIDHASH_SZ 1024
37 #define pid_hashfn(x) ((((x) >> 8) ^ (x)) & (PIDHASH_SZ - 1))
38
39 // a hierarchy of processes
40 struct process_family {
41         //the (god)father of the process family
42         int father;
43         //members list (father process is the first element)
44         struct list members;
45         //non-members list
46         //hashtable with all the processes (array of struct list of struct process)
47         struct list *hashtable[PIDHASH_SZ];
48         //total process count
49         int count;
50 };
51
52 // process descriptor
53 struct process {
54         int pid;
55         int starttime;
56         int member;
57         struct process_history *history;
58 };
59
60 // object to enumerate running processes
61 struct process_iterator {
62         DIR *dip;
63         struct dirent *dit;     
64 };
65
66 // searches for all the processes derived from father and stores them
67 // in the process family struct
68 int create_process_family(struct process_family *f, int father);
69
70 // checks if there are new processes born in the specified family
71 // if any they are added to the members list
72 // the number of new born processes is returned
73 int check_new_members(struct process_family *f);
74
75 // removes a process from the family by its pid
76 void remove_process_from_family(struct process_family *f, int pid);
77
78 // free the heap memory used by a process family
79 void cleanup_process_family(struct process_family *f);
80
81 // searches a process given the name of the executable file, or its absolute path
82 // returns the pid, or 0 if it's not found
83 int look_for_process_by_name(const char *process);
84
85 // searches a process given its pid
86 // returns the pid, or 0 if it's not found
87 int look_for_process_by_pid(int pid);
88
89 #endif