diff --git a/vivado-wrapper b/vivado-wrapper
index 9f723658ce9f1b20ff1925d69066fb76f0e5f9d0..6ae897c068a600f207a66aaf848beac0af8f9596 100755
--- a/vivado-wrapper
+++ b/vivado-wrapper
@@ -15,6 +15,9 @@ _vw_version="${_vw_version_major}.${_vw_version_minor}"
 [[ $_vw_version_major == 0 ]] && echo "Vivado wrapper is unfinished, and unable to work." && exit 11
 [[ $_vw_bin_name == '' ]] && _vw_bin_name=vivado-wrapper
 
+trap "exit 9" TERM
+export _vw_mypid=$$
+
 function show_help () {
     echo "Vivado wrapper ${_vw_version}
 Usage:
@@ -63,6 +66,10 @@ Examples:
     "
 }
 
+function echo2 () {
+    echo $@ > /dev/fd/2
+}
+
 function where_is_him () {
     SOURCE="$1"
     while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
@@ -110,14 +117,16 @@ function import_vivadofile () {
 }
 
 function get_constraint_of_module () {
+    # stdout of this function is used as return val.
     _mod_name="$1"
     for _ele in "${top_modules[@]}" ; do
         _key=${_ele%%:*}
         _value=${_ele#*:}
         [[ ${_key} == ${_mod_name} ]] && echo -n "${_value}" && return 0
     done
-    echo "Error: Can not find constraint for module '$_mod_name'"
-    exit 1
+    echo2 "Error: Can not find constraint for module '$_mod_name'"
+    # `exit 9` won't work. 
+    kill -s TERM $_vw_mypid
 }
 
 function generate_real_project () {