diff --git a/smi/src/smi_def.h b/smi/src/smi_def.h
index 1989e79b7021168bd03c0827b7173c7758cfbd0f..2eb7a75f4ba15385c8ae6bf997aae2871eef15ee 100644
--- a/smi/src/smi_def.h
+++ b/smi/src/smi_def.h
@@ -2,7 +2,7 @@
 #define SMIDEF_H
 
 #define VERSION_MAJOR 2
-#define VERSION_MINOR 20
+#define VERSION_MINOR 21
 
 #define ATOMIC_UNLOCKED -1 
 #define ATOMIC_UNLOCKED0 0
diff --git a/smi/src/taskdisp_nrt.c b/smi/src/taskdisp_nrt.c
index 09f476f732dbfafa522f9aaa800f01d76c427e53..bd6ab02075f3bf439a85a35d2f9bbc4daffd78e8 100644
--- a/smi/src/taskdisp_nrt.c
+++ b/smi/src/taskdisp_nrt.c
@@ -103,12 +103,18 @@ void killProcess_(processType nrtProcessID)
 	) {
 		printf("[killProcess_] killing process %lld nrtProcessID=%d\n",
 			(long long int)shm->pid[nrtProcessID],nrtProcessID); 
+/*
 // kill child procresses
 		sprintf(str,"pkill -9 -P %lld\n",(long long int)shm->pid[nrtProcessID]);
 		ret=system(str);
 // kill parent process
 		sprintf(str,"kill -9 %lld\n",(long long int)shm->pid[nrtProcessID]);
 		ret=system(str);
+*/
+// kill process and all its descendants
+		sprintf(str,"kill -9 `pstree -l -p %lld | grep -oP '(?<=\\()[0-9]+(?=\\))'`",
+		 (long long int)shm->pid[nrtProcessID]);		
+		ret=system(str);
                 ret=ret; // eliminate compiler warning
 		usleep(STD_SLEEP); // possibly longer sleep time required
 	for (i=0;i<shm->numberOfTaskStates;i++) {