在SimGrid中删除待处理任务

时间:2016-08-08 13:31:10

标签: simgrid

我有worker进程启动executorExecutor是一个创建10秒任务并执行它的过程。但是在2秒后,工作人员杀死executor进程。杀死executor后,SimGrid给了我一个日志:

[  2.000000] (0:maestro@) dp_objs: 1 pending task?

当另一个进程终止当前正在运行的进程时,我应该如何正确地销毁任务和task_data

int worker(int argc, char *argv[])
{
    msg_process_t x = MSG_process_create("", executor, NULL, MSG_host_self());
    MSG_process_sleep(2);
    MSG_process_kill(x);
}

int executor(){
    MSG_process_on_exit(my_onexit, NULL);
    task = MSG_task_create("", 1e10, 10, NULL);
    MSG_task_execute(task);
    return 0;
}
int my_onexit() {
     MSG_task_cancel(task);
     XBT_INFO("Exiting now (done sleeping or got killed).");
     return 0;
}

UPD : 我宣布了一个全局变量msg_task_t task

现在,当我运行代码时,我有:

[  2.000000] (0:maestro@) Oops ! Deadlock or code not perfectly clean.
[  2.000000] (0:maestro@) 1 processes are still running, waiting for something.
[  2.000000] (0:maestro@) Legend of the following listing: "Process <pid> (<name>@<host>): <status>"
[  2.000000] (0:maestro@) Process 2 (@Worker2)
Process finished with exit code 134 (interrupted by signal 6: SIGABRT)

我预计simgrid会显示xbt_info消息,但它没有并因SIGABRT错误而中断。

2 个答案:

答案 0 :(得分:2)

你应该MSG_task_cancel()你要做的任务&#34;杀死&#34;。您可以在MSG_process_on_exit()回调中注册的函数中执行此操作。

答案 1 :(得分:2)

再次思考它,您看到的消息不是错误消息,而只是警告。你可以安全地忽略它。我很确定执行任务会在处理器被杀时自动取消。

所以你没有任何事情可以让它发挥作用,我会说。只是忽略那条消息。