diff -u -r openhpi-3.4.0.orig/hpi_shell/hpi_cmd.c openhpi-3.4.0/hpi_shell/hpi_cmd.c
--- openhpi-3.4.0.orig/hpi_shell/hpi_cmd.c	2012-05-03 19:27:12.000000000 +0400
+++ openhpi-3.4.0/hpi_shell/hpi_cmd.c		2014-03-19 19:50:40.000000000 +0400
@@ -25,6 +25,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <signal.h>
 #include "hpi_cmd.h"
 #include <oh_clients.h>

@@ -73,6 +74,12 @@
                 g_free ( f_cmdfile );
         }

+	/* Set up signal handler */
+	signal(SIGHUP,  signal_handler);
+	signal(SIGINT,  signal_handler);
+	signal(SIGTERM, signal_handler);
+	signal(SIGQUIT, signal_handler);
+
 	domainlist = (GSList *)NULL;
 	if (open_session(copt.domainid, f_events) == -1) 
                     //TODO For complete implementation of -N option, need to call 
@@ -181,3 +188,12 @@
 	read_stdin = 0;
 	return(HPI_SHELL_OK);
 }
+
+void signal_handler(int signo)
+{
+    psignal(signo, "Exiting by signal");
+    restore_term_flags();
+    close_session();
+    exit(1);
+}
+
diff -u -r openhpi-3.4.0.orig/hpi_shell/hpi_cmd.h openhpi-3.4.0/hpi_shell/hpi_cmd.h
--- openhpi-3.4.0.orig/hpi_shell/hpi_cmd.h	2012-06-04 20:26:48.000000000 +0400
+++ openhpi-3.4.0/hpi_shell/hpi_cmd.h		2014-03-19 19:38:57.000000000 +0400
@@ -142,6 +142,7 @@
 extern ret_code_t	open_file(char *path);
 extern int		open_session(SaHpiDomainIdT domainId, int eflag);
 extern void		restore_term_flags(void);
+extern void		signal_handler(int signo);
 extern int		run_command(void);
 extern ret_code_t	sen_block(void);
 extern ret_code_t	sen_block_disable(void);
 
