diff --git a/sbin/ping/ping.8 b/sbin/ping/ping.8
index 9a29388d3f35..509b010a78d9 100644
--- a/sbin/ping/ping.8
+++ b/sbin/ping/ping.8
@@ -42,7 +42,7 @@
 packets to network hosts
 .Sh SYNOPSIS
 .Nm
-.Op Fl QRadfnqrv
+.Op Fl AQRadfnqrv
 .Op Fl c Ar count
 .Op Fl i Ar wait
 .Op Fl l Ar preload
@@ -79,6 +79,12 @@ and then an arbitrary number of
 .Dq pad
 bytes used to fill out the packet.  The options are as follows:
 .Bl -tag -width indent
+.It Fl A
+Audible.
+Include a bell
+.Pq ASCII 0x07
+character in the output when no packet is received before the next packet
+is transmitted.
 .It Fl a
 Audible.
 Include a bell
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index 3b573c6296c4..1209dc894090 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -135,6 +135,7 @@ int options;
 #endif /*IPSEC_POLICY_IPSEC*/
 #endif /*IPSEC*/
 #define	F_TTL		0x8000
+#define	F_MISSED	0x10000
 
 /*
  * MAX_DUP_CHK is the number of bits in received table, i.e. the maximum
@@ -150,6 +151,7 @@ int datalen = DEFDATALEN;
 int s;				/* socket file descriptor */
 u_char outpack[MAXPACKET];
 char BSPACE = '\b';		/* characters written for flood */
+char BBELL = '\a';		/* characters written for MISSED and AUDIBLE */
 char DOT = '.';
 char *hostname;
 char *shostname;
@@ -236,7 +238,7 @@ main(argc, argv)
 
 	datap = &outpack[8 + PHDR_LEN];
 	while ((ch = getopt(argc, argv,
-		"I:LQRS:T:c:adfi:l:m:np:qrs:t:v"
+		"AI:LQRS:T:c:adfi:l:m:np:qrs:t:v"
 #ifdef IPSEC
 #ifdef IPSEC_POLICY_IPSEC
 		"P:"
@@ -245,6 +247,9 @@ main(argc, argv)
 		)) != -1)
 	{
 		switch(ch) {
+		case 'A':
+			options |= F_MISSED;
+			break;
 		case 'a':
 			options |= F_AUDIBLE;
 			break;
@@ -695,6 +700,9 @@ main(argc, argv)
 					intvl.tv_sec = MAXWAIT;
 			}
 			(void)gettimeofday(&last, NULL);
+
+			if (ntransmitted != nreceived+1 && options & F_MISSED)
+				(void)write(STDOUT_FILENO, &BBELL, 1);
 		}
 	}
 	finish();
@@ -855,7 +863,7 @@ pr_pack(buf, cc, from, tv)
 			if (dupflag)
 				(void)printf(" (DUP!)");
 			if (options & F_AUDIBLE)
-				(void)printf("\a");
+				(void)write(STDOUT_FILENO, &BBELL, 1);
 			/* check the data */
 			cp = (u_char*)&icp->icmp_data[PHDR_LEN];
 			dp = &outpack[8 + PHDR_LEN];