Index: kernel/generic/include/proc/task.h
===================================================================
--- kernel/generic/include/proc/task.h	(revision 103939e306be2c8479c923b22f2b89e6530d9111)
+++ kernel/generic/include/proc/task.h	(revision 035d7d815fa7121e29c642d43f0b5cc14afb8783)
@@ -97,4 +97,7 @@
 	cap_info_t *cap_info;
 
+	/** Exit reason. */
+	exit_reason_t exit_reason;
+	
 	/* IPC stuff */
 
Index: kernel/generic/src/proc/task.c
===================================================================
--- kernel/generic/src/proc/task.c	(revision 103939e306be2c8479c923b22f2b89e6530d9111)
+++ kernel/generic/src/proc/task.c	(revision 035d7d815fa7121e29c642d43f0b5cc14afb8783)
@@ -83,5 +83,5 @@
 
 /* Forward declarations. */
-static void task_kill_internal(task_t *);
+static void task_kill_internal(task_t *, exit_reason_t);
 static errno_t tsk_constructor(void *, unsigned int);
 static size_t tsk_destructor(void *);
@@ -527,8 +527,10 @@
 }
 
-static void task_kill_internal(task_t *task)
+static void task_kill_internal(task_t *task, exit_reason_t exit_reason)
 {
 	irq_spinlock_lock(&task->lock, false);
 	irq_spinlock_lock(&threads_lock, false);
+
+	task->exit_reason = exit_reason;
 
 	/*
@@ -578,5 +580,5 @@
 	}
 
-	task_kill_internal(task);
+	task_kill_internal(task, EXIT_REASON_KILLED);
 	irq_spinlock_unlock(&tasks_lock, true);
 
@@ -611,5 +613,5 @@
 
 	irq_spinlock_lock(&tasks_lock, true);
-	task_kill_internal(TASK);
+	task_kill_internal(TASK, EXIT_REASON_SELF);
 	irq_spinlock_unlock(&tasks_lock, true);
 
Index: kernel/generic/src/proc/thread.c
===================================================================
--- kernel/generic/src/proc/thread.c	(revision 103939e306be2c8479c923b22f2b89e6530d9111)
+++ kernel/generic/src/proc/thread.c	(revision 035d7d815fa7121e29c642d43f0b5cc14afb8783)
@@ -527,6 +527,7 @@
 			 * after any IPC cleanup operations. Ignore any errors.
 			 */
-			(void)event_notify_2(EVENT_EXIT, false,
-			    LOWER32(TASK->taskid), UPPER32(TASK->taskid));
+			(void)event_notify_3(EVENT_EXIT, false,
+			    LOWER32(TASK->taskid), UPPER32(TASK->taskid),
+			    TASK->exit_reason);
 		}
 	}
