--- networking/httpd.c
+++ networking/httpd.c
@@ -284,6 +284,7 @@
 
 /* TODO: use TCP_CORK, parse_config() */
 
+#define WANT_PIDFILE 1
 #include "libbb.h"
 #include "common_bufsiz.h"
 #if ENABLE_PAM
@@ -2734,6 +2735,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,
@@ -2745,6 +2747,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,
@@ -2758,6 +2761,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;)
@@ -2780,6 +2784,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 */
@@ -2789,6 +2794,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
 		);
@@ -2875,6 +2881,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 */
