Add foreground option to daemon
Signed-off-by: Michael Jumper <zhangmaike@users.sourceforge.net>
This commit is contained in:
parent
fb93af4ce6
commit
d39b2e8208
@ -20,6 +20,7 @@
|
|||||||
* the Initial Developer. All Rights Reserved.
|
* the Initial Developer. All Rights Reserved.
|
||||||
*
|
*
|
||||||
* Contributor(s):
|
* Contributor(s):
|
||||||
|
* David PHAM-VAN <d.pham-van@ulteo.com> Ulteo SAS - http://www.ulteo.com
|
||||||
*
|
*
|
||||||
* Alternatively, the contents of this file may be used under the terms of
|
* Alternatively, the contents of this file may be used under the terms of
|
||||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||||
@ -199,6 +200,7 @@ int main(int argc, char* argv[]) {
|
|||||||
char* listen_port = "4822"; /* Default port */
|
char* listen_port = "4822"; /* Default port */
|
||||||
char* pidfile = NULL;
|
char* pidfile = NULL;
|
||||||
int opt;
|
int opt;
|
||||||
|
int foreground = 0;
|
||||||
|
|
||||||
/* General */
|
/* General */
|
||||||
int retval;
|
int retval;
|
||||||
@ -207,13 +209,16 @@ int main(int argc, char* argv[]) {
|
|||||||
pid_t daemon_pid;
|
pid_t daemon_pid;
|
||||||
|
|
||||||
/* Parse arguments */
|
/* Parse arguments */
|
||||||
while ((opt = getopt(argc, argv, "l:b:p:")) != -1) {
|
while ((opt = getopt(argc, argv, "l:b:p:f")) != -1) {
|
||||||
if (opt == 'l') {
|
if (opt == 'l') {
|
||||||
listen_port = strdup(optarg);
|
listen_port = strdup(optarg);
|
||||||
}
|
}
|
||||||
else if (opt == 'b') {
|
else if (opt == 'b') {
|
||||||
listen_address = strdup(optarg);
|
listen_address = strdup(optarg);
|
||||||
}
|
}
|
||||||
|
else if (opt == 'f') {
|
||||||
|
foreground = 1;
|
||||||
|
}
|
||||||
else if (opt == 'p') {
|
else if (opt == 'p') {
|
||||||
pidfile = strdup(optarg);
|
pidfile = strdup(optarg);
|
||||||
}
|
}
|
||||||
@ -222,6 +227,7 @@ int main(int argc, char* argv[]) {
|
|||||||
fprintf(stderr, "USAGE: %s"
|
fprintf(stderr, "USAGE: %s"
|
||||||
" [-l LISTENPORT]"
|
" [-l LISTENPORT]"
|
||||||
" [-b LISTENADDRESS]"
|
" [-b LISTENADDRESS]"
|
||||||
|
" [-f foreground]"
|
||||||
" [-p PIDFILE]\n", argv[0]);
|
" [-p PIDFILE]\n", argv[0]);
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
@ -295,36 +301,38 @@ int main(int argc, char* argv[]) {
|
|||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Fork into background */
|
if (!foreground) {
|
||||||
daemon_pid = fork();
|
/* Fork into background */
|
||||||
|
daemon_pid = fork();
|
||||||
/* If error, fail */
|
|
||||||
if (daemon_pid == -1) {
|
|
||||||
guacd_log_error("Error forking daemon process: %s", strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If parent, write PID file and exit */
|
|
||||||
else if (daemon_pid != 0) {
|
|
||||||
|
|
||||||
if (pidfile != NULL) {
|
|
||||||
|
|
||||||
/* Attempt to open pidfile and write PID */
|
|
||||||
FILE* pidf = fopen(pidfile, "w");
|
|
||||||
if (pidf) {
|
|
||||||
fprintf(pidf, "%d\n", daemon_pid);
|
|
||||||
fclose(pidf);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Warn on failure */
|
|
||||||
else {
|
|
||||||
guacd_log_error("Could not write PID file: %s", strerror(errno));
|
|
||||||
exit(EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
/* If error, fail */
|
||||||
|
if (daemon_pid == -1) {
|
||||||
|
guacd_log_error("Error forking daemon process: %s", strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
exit(EXIT_SUCCESS);
|
/* If parent, write PID file and exit */
|
||||||
|
else if (daemon_pid != 0) {
|
||||||
|
|
||||||
|
if (pidfile != NULL) {
|
||||||
|
|
||||||
|
/* Attempt to open pidfile and write PID */
|
||||||
|
FILE* pidf = fopen(pidfile, "w");
|
||||||
|
if (pidf) {
|
||||||
|
fprintf(pidf, "%d\n", daemon_pid);
|
||||||
|
fclose(pidf);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Warn on failure */
|
||||||
|
else {
|
||||||
|
guacd_log_error("Could not write PID file: %s", strerror(errno));
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(EXIT_SUCCESS);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Open log */
|
/* Open log */
|
||||||
|
Loading…
Reference in New Issue
Block a user