Hi,
There is no real equivalent of Haskell's killthread in lwt or async. The closest in lwt is Lwt.cancel: if a thread is blocked on a cancelable operation, this one will fail with Lwt.Canceled. Cancelable operations include: sockets and pipes IO, sleeping, waiting on an mvar, etc...
In async the way to do it is to pass an "interrupt" deferred (basically just a [unit Deferred.t] value) down to low-level fd operations. When this deferred becomes determined the operation in progress will be interrupted.
Hope that helps,
Jeremie