-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjobs.c
More file actions
90 lines (72 loc) · 1.99 KB
/
jobs.c
File metadata and controls
90 lines (72 loc) · 1.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "headers.h"
void print_jobs(){
// printf("njobs - func %d\n", njobs);
for(int i = 1; i <= njobs; i++){
int pid_job;
char name[1000];
char stat[2000] = "";
pid_job = pids[i];
strcpy(name, names[i]);
//*** Stat File ***
sprintf(stat, "/proc/%d/stat", pid_job);
// printf("stat file: %s\n", stat);
char buffer[2000] = "";
int fd;
fd = open(stat, O_RDONLY);
if(fd == -1){
printf("\033[0;31mError: Invalid PID\033[0m\n");
return;
}
read(fd, buffer, sizeof(buffer));
// printf("Stat buff:\n %s\n", buffer);
ll n_stat = 0;
char *list[100];
list[0] = strtok(buffer, " ");
while (list[n_stat] != NULL)
{
// printf("part %lld: %s\n", n_stat, list[n_stat]);
n_stat++;
list[n_stat] = strtok(NULL, " ");
}
// printf("status: %s\n", list[2]);
if(strcmp(list[2], "T")==0)
{
printf("[%d] Stopped %s [%d]\n", i, name, pid_job);
}
else
{
printf("[%d] Running %s [%d]\n", i, name, pid_job);
}
}
}
void kjob(char *commands[], ll n){
// printf("kjobs\n");
int job_num, sig_num;
if(n>3){
printf("\033[0;31mError: Too many arguments\033[0m\n");
return;
}
else if(n<3){
printf("\033[0;31mError: Too less arguments\033[0m\n");
return;
}
else{
job_num = atoi(commands[1]);
sig_num = atoi(commands[2]);
if(job_num > njobs || job_num <= 0){
printf("\033[0;31mError: No process found\033[0m\n");
return;
}
if(sig_num == 9){
killjob_flag = 1;
}
kill(pids[job_num], sig_num);
}
}
void overkill(){
for(int i=1; i<=njobs; i++)
{
kill(pids[i],9);
}
overkill_flag=1;
}