#include #include #include #include "pvm3.h" #include "pvm_lib.h" #define EXEC "murderer" #define GROUP "murder" int main(int argc, char **argv){ int *tids, ntask, mytid, ptid; if((argc != 2) || ((ntask = atoi(argv[1])) == 0)){ fprintf(stderr,"Usage: %s \n", argv[0]); exit(0); } mytid = pvm_error_check(pvm_mytid(), "pvm_mytid"); ptid = pvm_parent(); if(ptid == PvmNoParent){ tids = (int*)calloc(sizeof(int), ntask); pvm_error_check(pvm_spawn(EXEC, &argv[1], 0, "", ntask, tids), "pvm_spawn"); pvm_error_check(pvm_initsend(PvmDataDefault), "pvm_initsend"); pvm_error_check(pvm_pkint(&ntask,1,1), "pvm_pkint"); pvm_error_check(pvm_send(tids[ntask-1],1), "pvm_send"); } else{ int size, i, k_tid, me, info; me = pvm_error_check(pvm_joingroup(GROUP), "pvm_joingroup"); pvm_error_check(pvm_barrier(GROUP,ntask), "pvm_barrier"); info = pvm_error_check(pvm_recv(ptid, -1), "pvm_recv"); fprintf(stderr,"I'm the murderer, me=%d!\n", me); size = pvm_error_check(pvm_gsize(GROUP), "pvm_gsize"); for(i = 0; i < size;i++){ if(i != me){ fprintf(stderr,"Killing %d\n",i); k_tid = pvm_error_check(pvm_gettid(GROUP, i),"pvm_gettid"); pvm_error_check(pvm_kill(k_tid), "pvm_kill"); } } pvm_lvgroup(GROUP); } pvm_exit(); exit(0); }