+void SIMIX_process_kill(smx_process_t process) {
+
+ XBT_DEBUG("Killing process %s on %s", process->name, process->smx_host->name);
+
+ process->context->iwannadie = 1;
+ process->blocked = 0;
+ process->suspended = 0;
+ /* FIXME: set doexception to 0 also? */
+
+ if (process->waiting_action) {
+
+ switch (process->waiting_action->type) {
+
+ case SIMIX_ACTION_EXECUTE:
+ case SIMIX_ACTION_PARALLEL_EXECUTE:
+ SIMIX_host_execution_destroy(process->waiting_action);
+ break;
+
+ case SIMIX_ACTION_COMMUNICATE:
+ SIMIX_comm_destroy(process->waiting_action);
+ break;
+
+ case SIMIX_ACTION_SLEEP:
+ SIMIX_process_sleep_destroy(process->waiting_action);
+ break;
+
+ case SIMIX_ACTION_SYNCHRO:
+ SIMIX_synchro_stop_waiting(process, &process->request);
+ SIMIX_synchro_destroy(process->waiting_action);
+ break;
+
+ case SIMIX_ACTION_IO:
+ THROW_UNIMPLEMENTED;
+ break;
+ }
+ }
+
+ xbt_dynar_push_as(simix_global->process_to_run, smx_process_t, process);
+}
+
+/**
+ * \brief Kills all running processes.
+ * \param issuer this one will not be killed
+ */
+void SIMIX_process_killall(smx_process_t issuer)
+{
+ smx_process_t p = NULL;
+
+ while ((p = xbt_swag_extract(simix_global->process_list))) {
+ if (p != issuer) {
+ SIMIX_process_kill(p);
+ }
+ }
+
+ SIMIX_context_runall(simix_global->process_to_run);
+
+ SIMIX_process_empty_trash();
+}
+
+void SIMIX_process_change_host(smx_process_t process,
+ smx_host_t dest)