删除 SimGrid 中的待处理任务
Delete pending task in SimGrid
我有启动 executor
的进程 worker
。 Executor
是一个创建 10 秒任务并执行它的进程。但是在 2 秒后,worker 杀死了 executor
进程。 SimGrid 在杀死 executor
:
后给了我一个日志
[ 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
错误并中断。
您应该 MSG_task_cancel()
您想要 "kill" 的任务。您可以在 MSG_process_on_exit()
回调中注册的函数中执行此操作。
再想一想,您看到的消息不是错误消息,而只是警告。您可以安全地忽略它。我很确定当处理器被杀死时,已执行的任务会自动取消。
所以你不需要做任何事情来让它工作,我会说。请忽略该消息。
我有启动 executor
的进程 worker
。 Executor
是一个创建 10 秒任务并执行它的进程。但是在 2 秒后,worker 杀死了 executor
进程。 SimGrid 在杀死 executor
:
[ 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
错误并中断。
您应该 MSG_task_cancel()
您想要 "kill" 的任务。您可以在 MSG_process_on_exit()
回调中注册的函数中执行此操作。
再想一想,您看到的消息不是错误消息,而只是警告。您可以安全地忽略它。我很确定当处理器被杀死时,已执行的任务会自动取消。
所以你不需要做任何事情来让它工作,我会说。请忽略该消息。