-
Notifications
You must be signed in to change notification settings - Fork 0
/
printstatus.c
72 lines (45 loc) · 1.38 KB
/
printstatus.c
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
#include "printstatus.h"
static void print_pipe_info(struct cmd* c) {
struct pipecmd* p;
if (c->type == PIPE) {
p = (struct pipecmd*)c;
print_pipe_info(p->leftcmd);
printf("%s", "|");
print_pipe_info(p->rightcmd);
return;
}
fprintf(stdout, " %s ", c->scmd);
return;
}
// prints information of process' status
void print_status_info(struct cmd* cmd) {
if (strlen(cmd->scmd) == 0
&& cmd->type != PIPE)
return;
if (cmd->type == PIPE) {
fprintf(stdout, "%s Command: [", COLOR_BLUE);
print_pipe_info(cmd);
fprintf(stdout, "] done %s\n", COLOR_RESET);
// Sets global variable 'status'
status = WEXITSTATUS(status);
return;
}
if (WIFEXITED(status)) {
fprintf(stdout, "%s Program: [%s] exited, status: %d %s\n",
COLOR_BLUE, cmd->scmd, WEXITSTATUS(status), COLOR_RESET);
status = WEXITSTATUS(status);
} else if (WIFSIGNALED(status)) {
fprintf(stdout, "%s Program: [%s] killed, status: %d %s\n",
COLOR_BLUE, cmd->scmd, -WTERMSIG(status), COLOR_RESET);
status = -WTERMSIG(status);
} else if (WTERMSIG(status)) {
fprintf(stdout, "%s Program: [%s] stopped, status: %d %s\n",
COLOR_BLUE, cmd->scmd, -WSTOPSIG(status), COLOR_RESET);
status = -WSTOPSIG(status);
}
}
// prints info when a background process is spawned
void print_back_info(struct cmd* back) {
fprintf(stdout, "%s [PID=%d] %s\n",
COLOR_BLUE, back->pid, COLOR_RESET);
}