Skip to content
This repository was archived by the owner on Jan 22, 2022. It is now read-only.

Commit 7afc36a

Browse files
AdminAdmin
Admin
authored and
Admin
committed
Server daemonizing
1 parent aeada51 commit 7afc36a

File tree

1 file changed

+61
-32
lines changed

1 file changed

+61
-32
lines changed

server/src/server.c

+61-32
Original file line numberDiff line numberDiff line change
@@ -85,45 +85,74 @@ void ssl_server(int portnum) {
8585
SSL_CTX_free(ctx);
8686
}
8787

88-
static void *display_running() {
89-
char load[] = "\\|/-";
90-
int i = 0, msec = 0;
91-
long sec = 0, min = 0, hour = 0;
92-
mx_printstr("\033[1;33mNOTE: \033[33mPress \033[1;33mCtrl+C \033[33mto exit\033[0m\n");
93-
while (true) {
94-
if (i == 4)
95-
i = 0;
96-
if (++msec % 5 == 0)
97-
msec = 0, sec++;
98-
if (sec == 60)
99-
sec = 0, min++;
100-
if (min == 60)
101-
min = 0, hour++;
102-
mx_printstr("\r\033[32mServer is running \033[35m");
103-
if (hour > 0) {
104-
mx_printint(hour);
105-
mx_printstr(" h. ");
106-
}
107-
if (min > 0) {
108-
mx_printint(min);
109-
mx_printstr(" m. ");
110-
}
111-
mx_printint(sec);
112-
mx_printstr(" s. \033[36m");
113-
mx_printchar(load[i++]);
114-
mx_printstr("\033[0m ");
115-
usleep(200000);
116-
}
117-
return NULL;
88+
// static void *display_running() {
89+
// char load[] = "\\|/-";
90+
// int i = 0, msec = 0;
91+
// long sec = 0, min = 0, hour = 0;
92+
// mx_printstr("\033[1;33mNOTE: \033[33mPress \033[1;33mCtrl+C \033[33mto exit\033[0m\n");
93+
// while (true) {
94+
// if (i == 4)
95+
// i = 0;
96+
// if (++msec % 5 == 0)
97+
// msec = 0, sec++;
98+
// if (sec == 60)
99+
// sec = 0, min++;
100+
// if (min == 60)
101+
// min = 0, hour++;
102+
// mx_printstr("\r\033[32mServer is running \033[35m");
103+
// if (hour > 0) {
104+
// mx_printint(hour);
105+
// mx_printstr(" h. ");
106+
// }
107+
// if (min > 0) {
108+
// mx_printint(min);
109+
// mx_printstr(" m. ");
110+
// }
111+
// mx_printint(sec);
112+
// mx_printstr(" s. \033[36m");
113+
// mx_printchar(load[i++]);
114+
// mx_printstr("\033[0m ");
115+
// usleep(200000);
116+
// }
117+
// return NULL;
118+
// }
119+
120+
static void daemonize() {
121+
pid_t pid;
122+
pid = fork();
123+
if (pid < 0)
124+
exit(EXIT_FAILURE);
125+
if (pid > 0)
126+
exit(EXIT_SUCCESS);
127+
if (setsid() < 0)
128+
exit(EXIT_FAILURE);
129+
signal(SIGCHLD, SIG_IGN);
130+
signal(SIGHUP, SIG_IGN);
131+
132+
pid = fork();
133+
if (pid < 0)
134+
exit(EXIT_FAILURE);
135+
if (pid > 0)
136+
exit(EXIT_SUCCESS);
137+
umask(0);
138+
139+
int uchat_pid = getpid();
140+
printf("\033[32muchat_server started successfully\033[0m\n");
141+
printf("\033[36muchat_server pid: \033[0m%d\n", uchat_pid);
142+
printf("\033[1;33mTo \033[1;31mSTOP \033[1;33muchat_server: \033[0mkill %d\n", uchat_pid);
143+
printf("\033[1;33mIf you lost uchat_server pid:\033[0m ps -ax | grep uchat_server\n");
144+
for (int x = sysconf(_SC_OPEN_MAX); x >= 0; x--)
145+
close(x);
118146
}
119147

120148
int main(int argc, char *argv[]) {
121-
pthread_t display_thread = NULL;
122-
pthread_create(&display_thread, NULL, display_running, NULL);
149+
// pthread_t display_thread = NULL;
150+
// pthread_create(&display_thread, NULL, display_running, NULL);
123151
if (argc != 2) {
124152
fprintf(stderr, "usage : ./uchat_server [port]\n");
125153
exit(EXIT_FAILURE);
126154
}
155+
daemonize();
127156
int portnum = atoi(argv[1]);
128157
ssl_server(portnum);
129158
}

0 commit comments

Comments
 (0)