Add a ``-P pidfile'' option
This commit is contained in:
parent
be8bbe8809
commit
97cba131dc
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=53609
@ -34,6 +34,7 @@
|
|||||||
.Sh SYNOPSIS
|
.Sh SYNOPSIS
|
||||||
.Nm pppoed
|
.Nm pppoed
|
||||||
.Op Fl Fd
|
.Op Fl Fd
|
||||||
|
.Op Fl P Ar pidfile
|
||||||
.Op Fl a Ar name
|
.Op Fl a Ar name
|
||||||
.Op Fl e Ar exec
|
.Op Fl e Ar exec
|
||||||
.Op Fl p Ar provider
|
.Op Fl p Ar provider
|
||||||
@ -120,6 +121,12 @@ If the
|
|||||||
flag is given, additional diagnostics are provided (see the
|
flag is given, additional diagnostics are provided (see the
|
||||||
.Sx DIAGNOSTICS
|
.Sx DIAGNOSTICS
|
||||||
section below).
|
section below).
|
||||||
|
.Pp
|
||||||
|
If
|
||||||
|
.Ar pidfile
|
||||||
|
is given,
|
||||||
|
.Nm
|
||||||
|
will write its process ID to this file on startup.
|
||||||
.Sh DIAGNOSTICS
|
.Sh DIAGNOSTICS
|
||||||
After creating the necessary
|
After creating the necessary
|
||||||
.Xr netgraph 4
|
.Xr netgraph 4
|
||||||
|
@ -65,11 +65,13 @@
|
|||||||
static int
|
static int
|
||||||
usage(const char *prog)
|
usage(const char *prog)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Usage: %s [-Fd] [-a name] [-e exec] [-p provider]"
|
fprintf(stderr, "Usage: %s [-Fd] [-P pidfile] [-a name] [-e exec]"
|
||||||
" interface\n", prog);
|
" [-p provider] interface\n", prog);
|
||||||
return EX_USAGE;
|
return EX_USAGE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *pidfile;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
Fairwell(int sig)
|
Fairwell(int sig)
|
||||||
{
|
{
|
||||||
@ -81,6 +83,9 @@ Fairwell(int sig)
|
|||||||
|
|
||||||
syslog(LOG_INFO, buf);
|
syslog(LOG_INFO, buf);
|
||||||
|
|
||||||
|
if (pidfile)
|
||||||
|
remove(pidfile);
|
||||||
|
|
||||||
signal(sig, SIG_DFL);
|
signal(sig, SIG_DFL);
|
||||||
raise(sig);
|
raise(sig);
|
||||||
}
|
}
|
||||||
@ -422,17 +427,22 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
prog = strrchr(argv[0], '/');
|
prog = strrchr(argv[0], '/');
|
||||||
prog = prog ? prog + 1 : argv[0];
|
prog = prog ? prog + 1 : argv[0];
|
||||||
|
pidfile = NULL;
|
||||||
exec = NULL;
|
exec = NULL;
|
||||||
acname = NULL;
|
acname = NULL;
|
||||||
provider = "";
|
provider = "";
|
||||||
optF = optd = 0;
|
optF = optd = 0;
|
||||||
|
|
||||||
while ((ch = getopt(argc, argv, "a:Fde:p:")) != -1) {
|
while ((ch = getopt(argc, argv, "FP:a:de:p:")) != -1) {
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'F':
|
case 'F':
|
||||||
optF = 1;
|
optF = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'P':
|
||||||
|
pidfile = optarg;
|
||||||
|
break;
|
||||||
|
|
||||||
case 'a':
|
case 'a':
|
||||||
acname = optarg;
|
acname = optarg;
|
||||||
break;
|
break;
|
||||||
@ -512,9 +522,26 @@ main(int argc, char **argv)
|
|||||||
|
|
||||||
if (!optF && daemon(1, 0) == -1) {
|
if (!optF && daemon(1, 0) == -1) {
|
||||||
perror("daemon()");
|
perror("daemon()");
|
||||||
|
close(cs);
|
||||||
|
close(ds);
|
||||||
return EX_OSERR;
|
return EX_OSERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (pidfile != NULL) {
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
if ((fp = fopen(pidfile, "w")) == NULL) {
|
||||||
|
perror(pidfile);
|
||||||
|
close(cs);
|
||||||
|
close(ds);
|
||||||
|
return EX_CANTCREAT;
|
||||||
|
} else {
|
||||||
|
fprintf(fp, "%d\n", (int)getpid());
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
openlog(prog, LOG_PID | (optF ? LOG_PERROR : 0), LOG_DAEMON);
|
openlog(prog, LOG_PID | (optF ? LOG_PERROR : 0), LOG_DAEMON);
|
||||||
|
|
||||||
signal(SIGHUP, Fairwell);
|
signal(SIGHUP, Fairwell);
|
||||||
|
Loading…
Reference in New Issue
Block a user