File: write_pidfile

package info (click to toggle)
openbsd-inetd 0.20221205-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,080 kB
  • sloc: ansic: 24,214; perl: 110; sh: 81; makefile: 52
file content (44 lines) | stat: -rw-r--r-- 903 bytes parent folder | download | duplicates (2)
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
--- a/inetd.c
+++ b/inetd.c
@@ -287,6 +287,7 @@ void	reap(int, short, void *);
 void	retry(int, short, void *);
 void	die(int, short, void *);
 
+void	logpid(void);
 void	spawn(int, short, void *);
 void	gettcp(int, short, void *);
 int	setconfig(void);
@@ -409,6 +410,7 @@ main(int argc, char *argv[], char *envp[
 	}
 
 	openlog("inetd", LOG_PID | LOG_NOWAIT, LOG_DAEMON);
+	logpid();
 
 	if (getrlimit(RLIMIT_NOFILE, &rlim_nofile) == -1) {
 		syslog(LOG_ERR, "getrlimit: %m");
@@ -876,6 +878,7 @@ die(int sig, short events, void *arg)
 		}
 		(void)close(sep->se_fd);
 	}
+	(void)unlink("/run/inetd.pid");
 	exit(0);
 }
 
@@ -1576,6 +1579,17 @@ inetd_setproctitle(char *a, int s)
 		setproctitle("-%s", a);
 }
 
+void
+logpid(void)
+{
+	FILE *fp;
+
+	if ((fp = fopen("/run/inetd.pid", "w")) != NULL) {
+		fprintf(fp, "%ld\n", (long)getpid());
+		(void)fclose(fp);
+	}
+}
+
 int
 bump_nofile(void)
 {