diff --git a/akka-docs/src/main/paradox/scala/actors.md b/akka-docs/src/main/paradox/scala/actors.md
index 0d389ca5b0..ed64191921 100644
--- a/akka-docs/src/main/paradox/scala/actors.md
+++ b/akka-docs/src/main/paradox/scala/actors.md
@@ -1014,6 +1014,28 @@ Scala
Java
: @@snip [ActorDocTest.java]($code$/java/jdocs/actor/ActorDocTest.java) { #poison-pill }
+
+### Killing an Actor
+
+You can also "kill" an actor by sending a `Kill` message. Unlike `PoisonPill` this will cause
+the actor to throw a `ActorKilledException`, triggering a failure. The actor will
+suspend operation and its supervisor will be asked how to handle the failure,
+which may mean resuming the actor, restarting it or terminating it completely.
+See @ref:[What Supervision Means](general/supervision.md#supervision-directives) for more information.
+
+Use `Kill` like this:
+
+Scala
+: @@snip [ActorDocSpec.scala]($code$/scala/docs/actor/ActorDocSpec.scala) { #kill }
+
+Java
+: @@snip [ActorDocTest.java]($code$/java/jdocs/actor/ActorDocTest.java) { #kill }
+
+In general though it is not recommended to overly rely on either `PoisonPill` or `Kill` in
+designing your actor interactions, as often times a protocol-level message like `PleaseCleanupAndStop`
+which the actor knows how to handle is encouraged. The messages are there for being able to stop actors
+over which design you do not have control over.
+
### Graceful Stop
`gracefulStop` is useful if you need to wait for termination or compose ordered
@@ -1272,22 +1294,6 @@ then you should use the @scala[`UnboundedStash` trait] @java[`AbstractActorWithU
@@@
-
-## Killing an Actor
-
-You can kill an actor by sending a `Kill` message. This will cause the actor
-to throw a `ActorKilledException`, triggering a failure. The actor will
-suspend operation and its supervisor will be asked how to handle the failure,
-which may mean resuming the actor, restarting it or terminating it completely.
-See @ref:[What Supervision Means](general/supervision.md#supervision-directives) for more information.
-
-Use `Kill` like this:
-
-Scala
-: @@snip [ActorDocSpec.scala]($code$/scala/docs/actor/ActorDocSpec.scala) { #kill }
-
-Java
-: @@snip [ActorDocTest.java]($code$/java/jdocs/actor/ActorDocTest.java) { #kill }
## Actors and exceptions
diff --git a/akka-docs/src/test/java/jdocs/actor/ActorDocTest.java b/akka-docs/src/test/java/jdocs/actor/ActorDocTest.java
index 191b7e3f71..16ac702e52 100644
--- a/akka-docs/src/test/java/jdocs/actor/ActorDocTest.java
+++ b/akka-docs/src/test/java/jdocs/actor/ActorDocTest.java
@@ -789,8 +789,10 @@ public class ActorDocTest extends AbstractJavaTest {
watch(victim);
//#kill
victim.tell(akka.actor.Kill.getInstance(), ActorRef.noSender());
- //#kill
+
+ // expecting the actor to indeed terminate:
expectTerminated(Duration.create(3, TimeUnit.SECONDS), victim);
+ //#kill
}
};
}
diff --git a/akka-docs/src/test/scala/docs/actor/ActorDocSpec.scala b/akka-docs/src/test/scala/docs/actor/ActorDocSpec.scala
index 874f1025ce..0ebaa1fc04 100644
--- a/akka-docs/src/test/scala/docs/actor/ActorDocSpec.scala
+++ b/akka-docs/src/test/scala/docs/actor/ActorDocSpec.scala
@@ -3,6 +3,7 @@
*/
package docs.actor
+import akka.actor.Kill
import jdocs.actor.ImmutableMessage
import language.postfixOps
@@ -586,15 +587,30 @@ class ActorDocSpec extends AkkaSpec("""
}
}
//#watch
+
val victim = system.actorOf(Props(classOf[WatchActor], this))
implicit val sender = testActor
- //#kill
victim ! "kill"
expectMsg("finished")
- //#kill
}
}
+ "using Kill" in {
+ val victim = system.actorOf(TestActors.echoActorProps)
+ implicit val sender = testActor
+ val context = this
+
+ //#kill
+ context.watch(victim) // watch the Actor to receive Terminated message once it dies
+
+ victim ! Kill
+
+ expectMsgPF(hint = "expecting victim to terminate") {
+ case Terminated(v) if v == victim => v // the Actor has indeed terminated
+ }
+ //#kill
+ }
+
"demonstrate ActorSelection" in {
val context = system
//#selection-local