diff --git a/subprocess/Program.cs b/subprocess/Program.cs
index e9654c73..7b5faed3 100644
--- a/subprocess/Program.cs
+++ b/subprocess/Program.cs
@@ -1,4 +1,6 @@
 using System;
+using System.Diagnostics;
+using System.Threading.Tasks;
 using CefSharp.BrowserSubprocess;
 
 namespace TweetDuck.Browser{
@@ -8,10 +10,20 @@ static class Program{
         private static int Main(string[] args){
             SubProcess.EnableHighDPISupport();
             
-            const string typePrefix = "--type=";
-            string type = Array.Find(args, arg => arg.StartsWith(typePrefix, StringComparison.OrdinalIgnoreCase)).Substring(typePrefix.Length);
+            string FindArg(string key){
+                return Array.Find(args, arg => arg.StartsWith(key, StringComparison.OrdinalIgnoreCase)).Substring(key.Length);
+            }
 
-            if (type == "renderer"){
+            const string typePrefix = "--type=";
+            const string parentIdPrefix = "--host-process-id=";
+
+            if (!int.TryParse(FindArg(parentIdPrefix), out int parentId)){
+                return 0;
+            }
+
+            Task.Factory.StartNew(() => KillWhenHung(parentId), TaskCreationOptions.LongRunning);
+            
+            if (FindArg(typePrefix) == "renderer"){
                 using(SubProcess subProcess = new SubProcess(args)){
                     return subProcess.Run();
                 }
@@ -20,5 +32,18 @@ private static int Main(string[] args){
                 return SubProcess.ExecuteProcess();
             }
         }
+
+        private static async void KillWhenHung(int parentId){
+            try{
+                using(Process process = Process.GetProcessById(parentId)){
+                    process.WaitForExit();
+                }
+            }catch{
+                // ded
+            }
+
+            await Task.Delay(10000);
+            Environment.Exit(0);
+        }
     }
 }