--- networking/httpd.c.orig	2011-01-16 19:32:44.000000000 +0100
+++ networking/httpd.c	2011-01-16 20:42:11.505524002 +0100
@@ -93,6 +93,7 @@
  */
  /* TODO: use TCP_CORK, parse_config() */
 
+#define WANT_PIDFILE 1
 #include "libbb.h"
 #if ENABLE_FEATURE_HTTPD_USE_SENDFILE
 # include <sys/sendfile.h>
@@ -2321,6 +2322,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,
@@ -2332,6 +2334,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,
@@ -2345,6 +2348,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;)
@@ -2368,12 +2372,14 @@
 			IF_FEATURE_HTTPD_BASIC_AUTH("r:")
 			IF_FEATURE_HTTPD_AUTH_MD5("m:")
 			IF_FEATURE_HTTPD_SETUID("u:")
+			"P:"
 			"p:ifv",
 			&opt_c_configFile, &url_for_decode, &home_httpd
 			IF_FEATURE_HTTPD_ENCODE_URL_STR(, &url_for_encode)
 			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
 		);
@@ -2455,6 +2461,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 */
