2016-08-08 11 views
0

У меня есть процесс worker, который запускает executor. Executor - это процесс, который создает 10-секундную задачу и выполняет ее. Но после 2 сек. Работник убивает executor процесс. SimGrid дает мне журнал после убийства executor:Удалить незавершенную задачу в SimGrid

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

Я ожидал, что simgrid покажет xbt_info сообщение, но это не так, и прервал SIGABRT ошибки.

ответ

2

Вы должны указать MSG_task_cancel() задачу, которую вы хотите «убить». Вы можете сделать это в функции, зарегистрированной в обратном вызове MSG_process_on_exit().

+0

Как я могу добраться до 'задачи' в' onexit'? –

+0

Вы должны сохранить его в глобальном (или в MSG_process_set_data()), прежде чем приступить к его выполнению. Это намного проще, чем копать в внутренности SimGrid, чтобы потом получить его. –

2

Думая снова об этом, сообщение, которое вы видите, не является сообщением об ошибке, а просто предупреждением. Вы можете спокойно его игнорировать. Я уверен, что выполненные задачи автоматически отменяется, когда процессор убит.

Так что у вас нет ничего, чтобы что-то сделать, чтобы заставить его работать, я бы сказал. Просто игнорируйте это сообщение.

+0

Отменяет ли задача уничтожить ее? –

 Смежные вопросы

  • Нет связанных вопросов^_^