src/Pure/System/isabelle_system.scala
changeset 56862 e6f7ed54d64e
parent 56785 df03bf8c36a1
child 56871 d06ff36b4fa7
equal deleted inserted replaced
56861:5f827142d89a 56862:e6f7ed54d64e
   325 
   325 
   326     private def kill_cmd(signal: String): Int =
   326     private def kill_cmd(signal: String): Int =
   327       execute(true, "/usr/bin/env", "bash", "-c", "kill -" + signal + " -" + pid).waitFor
   327       execute(true, "/usr/bin/env", "bash", "-c", "kill -" + signal + " -" + pid).waitFor
   328 
   328 
   329     private def kill(signal: String): Boolean =
   329     private def kill(signal: String): Boolean =
   330     {
   330       Exn.Interrupt.postpone { kill_cmd(signal); kill_cmd("0") == 0 } getOrElse true
   331       try {
       
   332         kill_cmd(signal)
       
   333         kill_cmd("0") == 0
       
   334       }
       
   335       catch { case Exn.Interrupt() => true }
       
   336     }
       
   337 
   331 
   338     private def multi_kill(signal: String): Boolean =
   332     private def multi_kill(signal: String): Boolean =
   339     {
   333     {
   340       var running = true
   334       var running = true
   341       var count = 10
   335       var count = 10
   342       while (running && count > 0) {
   336       while (running && count > 0) {
   343         if (kill(signal)) {
   337         if (kill(signal)) {
   344           try { Thread.sleep(100) } catch { case Exn.Interrupt() => }
   338           Exn.Interrupt.postpone {
   345           count -= 1
   339             Thread.sleep(100)
       
   340             count -= 1
       
   341           }
   346         }
   342         }
   347         else running = false
   343         else running = false
   348       }
   344       }
   349       running
   345       running
   350     }
   346     }