Fixed #590: When exit signal recieved remove global lock
diff --git a/cache/global_lock.go b/cache/global_lock.go
index 52cf841..b7d1a5d 100644
--- a/cache/global_lock.go
+++ b/cache/global_lock.go
@@ -4,6 +4,7 @@
 	"encoding/json"
 	"io/ioutil"
 	"os"
+	"os/signal"
 	"path/filepath"
 	"time"
 
@@ -81,6 +82,23 @@
 		}
 	}()
 
+	// Capture ctrl-c or other interruptions then clean up the global lock.
+	ch := make(chan os.Signal)
+	signal.Notify(ch, os.Interrupt, os.Kill)
+	go func(cc <-chan os.Signal) {
+		s := <-cc
+		SystemUnlock()
+
+		// Exiting with the expected exit codes when we can.
+		if s == os.Interrupt {
+			os.Exit(130)
+		} else if s == os.Kill {
+			os.Exit(137)
+		} else {
+			os.Exit(1)
+		}
+	}(ch)
+
 	return nil
 }
 
@@ -104,8 +122,7 @@
 			msg.Info("Waiting on Glide global cache access")
 		}
 
-		// Check on the lock file every 15 seconds.
-		// TODO(mattfarina): should this be a different length?
+		// Check on the lock file every second.
 		time.Sleep(time.Second)
 	}
 }