From a10a7ff8f85fc9605f760822a1e98cda9f97be53 Mon Sep 17 00:00:00 2001 From: Navarrop Date: Mon, 17 Oct 2011 15:59:15 +0200 Subject: [PATCH] Add example to kill a process. --- buildtools/Cmake/AddTests.cmake | 3 + examples/msg/masterslave/CMakeLists.txt | 3 + .../deployment_masterslave_kill.xml | 5 ++ examples/msg/masterslave/masterslave_kill.c | 81 +++++++++++++++++++ .../msg/masterslave/masterslave_kill.tesh | 12 +++ examples/msg/masterslave/platform_kill.xml | 18 +++++ 6 files changed, 122 insertions(+) create mode 100644 examples/msg/masterslave/deployment_masterslave_kill.xml create mode 100644 examples/msg/masterslave/masterslave_kill.c create mode 100644 examples/msg/masterslave/masterslave_kill.tesh create mode 100644 examples/msg/masterslave/platform_kill.xml diff --git a/buildtools/Cmake/AddTests.cmake b/buildtools/Cmake/AddTests.cmake index 65184d5df7..ebbcaf4233 100644 --- a/buildtools/Cmake/AddTests.cmake +++ b/buildtools/Cmake/AddTests.cmake @@ -137,6 +137,7 @@ ADD_TEST(msg-masterslave-forwarder-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OP ADD_TEST(msg-masterslave-failure-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh) ADD_TEST(msg-masterslave-bypass-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh) ADD_TEST(msg-masterslave-mailbox-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh) +ADD_TEST(msg-masterslave-kill-thread ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:thread --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh) if(HAVE_UCONTEXT_H) ADD_TEST(msg-sendrecv-CLM03-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/sendrecv/sendrecv_CLM03.tesh) @@ -148,6 +149,7 @@ if(HAVE_UCONTEXT_H) ADD_TEST(msg-masterslave-failure-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh) ADD_TEST(msg-masterslave-bypass-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh) ADD_TEST(msg-masterslave-mailbox-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh) + ADD_TEST(msg-masterslave-kill-ucontext ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:ucontext --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh) endif(HAVE_UCONTEXT_H) if(HAVE_RAWCTX) @@ -160,6 +162,7 @@ if(HAVE_RAWCTX) ADD_TEST(msg-masterslave-failure-raw ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_failure.tesh) ADD_TEST(msg-masterslave-bypass-raw ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_bypass.tesh) ADD_TEST(msg-masterslave-mailbox-raw ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_mailbox.tesh) + ADD_TEST(msg-masterslave-kill-raw ${CMAKE_BINARY_DIR}/bin/tesh ${TESH_OPTION} --cfg contexts/factory:raw --setenv srcdir=${CMAKE_HOME_DIRECTORY}/examples/msg --cd ${CMAKE_BINARY_DIR}/examples/msg ${CMAKE_HOME_DIRECTORY}/examples/msg/masterslave/masterslave_kill.tesh) endif(HAVE_RAWCTX) if (enable_pcre) diff --git a/examples/msg/masterslave/CMakeLists.txt b/examples/msg/masterslave/CMakeLists.txt index 77786c2bb6..dc90fe30c9 100644 --- a/examples/msg/masterslave/CMakeLists.txt +++ b/examples/msg/masterslave/CMakeLists.txt @@ -8,6 +8,7 @@ add_executable(masterslave_mailbox "masterslave_mailbox.c") add_executable(masterslave_bypass "masterslave_bypass.c") add_executable(masterslave_console "masterslave_console.c") add_executable(masterslave_cluster "masterslave_cluster.c") +add_executable(masterslave_kill "masterslave_kill.c") ### Add definitions for compile if(WIN32) @@ -16,11 +17,13 @@ target_link_libraries(masterslave_failure simgrid ) target_link_libraries(masterslave_mailbox simgrid ) target_link_libraries(masterslave_bypass simgrid ) target_link_libraries(masterslave_console simgrid ) +target_link_libraries(masterslave_kill simgrid ) else(WIN32) target_link_libraries(masterslave_forwarder simgrid m ) target_link_libraries(masterslave_failure simgrid m ) target_link_libraries(masterslave_mailbox simgrid m ) target_link_libraries(masterslave_bypass simgrid m ) target_link_libraries(masterslave_console simgrid m ) +target_link_libraries(masterslave_kill simgrid m ) endif(WIN32) target_link_libraries(masterslave_cluster simgrid) \ No newline at end of file diff --git a/examples/msg/masterslave/deployment_masterslave_kill.xml b/examples/msg/masterslave/deployment_masterslave_kill.xml new file mode 100644 index 0000000000..2621d6e11a --- /dev/null +++ b/examples/msg/masterslave/deployment_masterslave_kill.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/msg/masterslave/masterslave_kill.c b/examples/msg/masterslave/masterslave_kill.c new file mode 100644 index 0000000000..b6248aeb6d --- /dev/null +++ b/examples/msg/masterslave/masterslave_kill.c @@ -0,0 +1,81 @@ +/* Copyright (c) 2007, 2009, 2010. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + +#include "msg/msg.h" /* Yeah! If you want to use msg, you need to include msg/msg.h */ +#include "xbt/sysdep.h" /* calloc */ + +/* Create a log channel to have nice outputs. */ +#include "xbt/log.h" +XBT_LOG_NEW_DEFAULT_CATEGORY(msg_test, + "Messages specific for this msg example"); + +/** Lazy guy function. This process suspends itself asap. */ +static int slave(int argc, char *argv[]) +{ + XBT_INFO("Hello!"); + XBT_INFO("Suspend process"); + MSG_process_suspend(MSG_process_self()); + MSG_task_execute(MSG_task_create("toto",10000000000000000,0,NULL)); + XBT_INFO("Bye!"); + return 0; +} /* end_of_lazy_guy */ + +static int master(int argc, char *argv[]) +{ + m_process_t bob = NULL; + + XBT_INFO("Hello!"); + bob = MSG_process_create("slave", slave, NULL, MSG_get_host_by_name("bob")); + MSG_process_sleep(10.0); + + XBT_INFO("Resume process"); + MSG_process_resume(bob); + + XBT_INFO("Kill process"); + MSG_process_kill(bob); + + XBT_INFO("OK, goodbye now."); + return 0; +} /* end_of_dram_master */ + +/** Test function */ +static MSG_error_t test_all(const char *platform_file, + const char *application_file) +{ + MSG_error_t res = MSG_OK; + + MSG_create_environment(platform_file); + MSG_function_register("master", master); + MSG_function_register("slave", slave); + MSG_launch_application(application_file); + + res = MSG_main(); + + XBT_INFO("Simulation time %g", MSG_get_clock()); + return res; +} /* end_of_test_all */ + + +/** Main function */ +int main(int argc, char *argv[]) +{ + MSG_error_t res = MSG_OK; + + MSG_global_init(&argc, argv); + if (argc < 3) { + XBT_CRITICAL("Usage: %s platform_file deployment_file\n", argv[0]); + XBT_CRITICAL("example: %s msg_platform.xml msg_deployment_suspend.xml\n", + argv[0]); + exit(1); + } + test_all(argv[1], argv[2]); + res = MSG_clean(); + + if (res == MSG_OK) + return 0; + else + return 1; +} /* end_of_main */ diff --git a/examples/msg/masterslave/masterslave_kill.tesh b/examples/msg/masterslave/masterslave_kill.tesh new file mode 100644 index 0000000000..2db6f370eb --- /dev/null +++ b/examples/msg/masterslave/masterslave_kill.tesh @@ -0,0 +1,12 @@ +#! ./tesh + +p Testing a simple master/slave example application + +$ $SG_TEST_EXENV masterslave/masterslave_kill$EXEEXT ${srcdir:=.}/masterslave/platform_kill.xml ${srcdir:=.}/masterslave/deployment_masterslave_kill.xml +> [alice:master:(1) 0.000000] [msg_test/INFO] Hello! +> [bob:slave:(2) 0.000000] [msg_test/INFO] Hello! +> [bob:slave:(2) 0.000000] [msg_test/INFO] Suspend process +> [alice:master:(1) 10.000000] [msg_test/INFO] Resume process +> [alice:master:(1) 10.000000] [msg_test/INFO] Kill process +> [alice:master:(1) 10.000000] [msg_test/INFO] OK, goodbye now. +> [10.000000] [msg_test/INFO] Simulation time 10 \ No newline at end of file diff --git a/examples/msg/masterslave/platform_kill.xml b/examples/msg/masterslave/platform_kill.xml new file mode 100644 index 0000000000..38ce19340a --- /dev/null +++ b/examples/msg/masterslave/platform_kill.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file -- 2.20.1