--- networking/httpd.c
+++ networking/httpd.c
@@ -290,6 +290,7 @@
 
 /* TODO: use TCP_CORK, parse_config() */
 
+#define WANT_PIDFILE 1
 #include "libbb.h"
 #include "common_bufsiz.h"
 #if ENABLE_PAM
@@ -2751,6 +2752,7 @@
 	IF_FEATURE_HTTPD_BASIC_AUTH(    r_opt_realm     ,)
 	IF_FEATURE_HTTPD_AUTH_MD5(      m_opt_md5       ,)
 	IF_FEATURE_HTTPD_SETUID(        u_opt_setuid    ,)
+	p_opt_pidfile   ,
 	p_opt_port      ,
 	p_opt_inetd     ,
 	p_opt_foreground,
@@ -2762,6 +2764,7 @@
 	OPT_REALM       = IF_FEATURE_HTTPD_BASIC_AUTH(    (1 << r_opt_realm     )) + 0,
 	OPT_MD5         = IF_FEATURE_HTTPD_AUTH_MD5(      (1 << m_opt_md5       )) + 0,
 	OPT_SETUID      = IF_FEATURE_HTTPD_SETUID(        (1 << u_opt_setuid    )) + 0,
+	OPT_PIDFILE     = 1 << p_opt_pidfile,
 	OPT_PORT        = 1 << p_opt_port,
 	OPT_INETD       = 1 << p_opt_inetd,
 	OPT_FOREGROUND  = 1 << p_opt_foreground,
@@ -2775,6 +2778,7 @@
 	int server_socket = server_socket; /* for gcc */
 	unsigned opt;
 	char *url_for_decode;
+	char *pidfilename;
 	IF_FEATURE_HTTPD_ENCODE_URL_STR(const char *url_for_encode;)
 	IF_FEATURE_HTTPD_SETUID(const char *s_ugid = NULL;)
 	IF_FEATURE_HTTPD_SETUID(struct bb_uidgid_t ugid;)
@@ -2797,6 +2801,7 @@
 			IF_FEATURE_HTTPD_BASIC_AUTH("r:")
 			IF_FEATURE_HTTPD_AUTH_MD5("m:")
 			IF_FEATURE_HTTPD_SETUID("u:")
+			"P:"
 			"p:ifv"
 			"\0"
 			/* -v counts, -i implies -f */
@@ -2806,6 +2811,7 @@
 			IF_FEATURE_HTTPD_BASIC_AUTH(, &g_realm)
 			IF_FEATURE_HTTPD_AUTH_MD5(, &pass)
 			IF_FEATURE_HTTPD_SETUID(, &s_ugid)
+			, &pidfilename
 			, &bind_addr_or_port
 			, &verbose
 		);
@@ -2892,6 +2898,8 @@
 #if BB_MMU
 	if (!(opt & OPT_FOREGROUND))
 		bb_daemonize(0); /* don't change current directory */
+	if (opt & OPT_PIDFILE)
+		write_pidfile(pidfilename);
 	mini_httpd(server_socket); /* never returns */
 #else
 	mini_httpd_nommu(server_socket, argc, argv); /* never returns */
